从Python使用Titan图数据库
我正在尝试使用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 使用。这里有些地方不太对:
- BULBS 将 Python 对象转换为图形
- Rexster 将图形转换为 JSON
- Titan 将 JSON 转换回图形??
- 并且还写入 Cassandra 存储
我想说的是:
- Titan 是一个 Blueprints 的实现,它会写入 Cassandra
- Rexster 托管 Blueprints 的实现,并通过 REST 接口使用 JSON 暴露该 API 的元素(还有 Gremlin)
- Bulbs 是一个在 Rexster 上的 Python 对象映射层。
总的来说,Python 和 Titan 之间没有直接的连接。Titan 有基于 JVM 的 Blueprints 接口,并且使用 Rexster 作为非 JVM 语言与它沟通的方式。