从Python使用Titan图数据库

3 投票
1 回答
2662 浏览
提问于 2025-04-18 03:33

我正在尝试使用Titan图数据库来建模一个网络拓扑。我想从一个Python应用程序中指定这个拓扑。

我有一个使用tinkertop框架注解的Java接口文件。下面是一个示例结构。

public interface IDeviceObject extends IBaseObject {

          @JsonProperty("mac")
          @Property("dl_addr")
          public String getMACAddress();
          @Property("dl_addr")
          public void setMACAddress(String macaddr);

          @JsonProperty("ipv4")
          @Property("nw_addr")
          public String getIPAddress();
          @Property("nw_addr")
          public void setIPAddress(String ipaddr);

          @JsonIgnore
          @Adjacency(label="host",direction = Direction.IN)
          public Iterable<IPortObject> getAttachedPorts();

          @JsonIgnore
          @Adjacency(label="host",direction=Direction.IN)
          public void setHostPort(final IPortObject port);

          @JsonIgnore
          @Adjacency(label="host",direction=Direction.IN)
          public void removeHostPort(final IPortObject port);

          @JsonIgnore
          @GremlinGroovy("it.in('host').in('on')")
          public Iterable<ISwitchObject> getSwitch();
    }


PYTHON OBJECTS  ----> BULBS ----> REXTER ---> Titan Graph DB ---> Cassandra DB

(1) BULBS把Python对象转换成图形

(2) Rexter把图形转换成JSON格式

(3) Titan把JSON格式再转换回图形??

(4) 还会写入Cassandra存储

看起来我做事情的方式有点绕,而且我可能漏掉了什么?如果有人能指出上面有什么问题,那就太好了。

1 个回答

4

你的图示:

PYTHON OBJECTS  ----> BULBS ----> Rexster ---> Titan Graph DB ---> Cassandra DB

看起来大致是对的,具体要看你怎么理解其中的抽象概念。你也可以这样定义:

PYTHON OBJECTS  ----> BULBS ----> Rexster/Titan ---> Cassandra DB

Rexster 基本上是嵌入了一个 Titan 实例,并通过 REST 接口让 Bulbs 使用。这里有些地方不太对:

  1. BULBS 将 Python 对象转换为图形
  2. Rexster 将图形转换为 JSON
  3. Titan 将 JSON 转换回图形??
  4. 并且还写入 Cassandra 存储

我想说的是:

  1. Titan 是一个 Blueprints 的实现,它会写入 Cassandra
  2. Rexster 托管 Blueprints 的实现,并通过 REST 接口使用 JSON 暴露该 API 的元素(还有 Gremlin
  3. Bulbs 是一个在 Rexster 上的 Python 对象映射层。

总的来说,Python 和 Titan 之间没有直接的连接。Titan 有基于 JVM 的 Blueprints 接口,并且使用 Rexster 作为非 JVM 语言与它沟通的方式。

撰写回答