如何在Titan数据库中覆盖顶点ID?

Luc*_*cas 3 neo4j nosql titan

我正在使用一个生成对象的框架,Node他们已经分配了一个id.现在需要将它们转换为Titan顶点,并在框架中控制相同的ID(访问时node.id)

public long addNode(Node node) {    
   TitanVertex vertex = (TitanVertex) g.addVertex(null);
   g.commit();

   vertex.setProperty(ID, node.id);
   vertex.setProperty(TYPE, node.type);
   vertex.setProperty(VERSION, node.version);
   vertex.setProperty(TIME, node.time);
   vertex.setProperty(DATA, node.data);
   ...
Run Code Online (Sandbox Code Playgroud)

错误:

java.lang.IllegalArgumentException: Name is reserved: id
Run Code Online (Sandbox Code Playgroud)

但它似乎不允许它.我应该使用一些虚假财产来模仿二级身份证吗?泰坦有办法做到这一点吗?

谢谢!

ste*_*tte 8

很少有图形数据库实际上允许您设置元素标识符.无论您使用的是Neo4j,OrientDB,Titan等,它们都倾向于拥有自己的ID系统.TinkerGraph实际上是唯一允许ID分配的蓝图实现.

如果您想保留您的ID,那么您只需将其重命名为其他内容即可.而不是"id",也许你可以使用"iid".为了使事情更加透明,从编程的角度来看,您可以考虑使用IdGraph包装器,它允许您执行以下操作:

gremlin> base = TitanFactory.open('/tmp/titan-berkley')
==>titangraph[local:/tmp/titan-berkley]
gremlin> g = new IdGraph(base, true, false)            
==>idgraph[titangraph[local:/tmp/titan-berkley]]
gremlin> g.addVertex(45)  
==>v[45]
gremlin> g.v(45)
==>v[45]
Run Code Online (Sandbox Code Playgroud)

你可以看到IdGraph允许它看起来好像你正在分配元素id本身.在幕后,它实际上只是使用关键索引.

  • `IdGraph`基本上就是在封面下,使用键索引来查找顶点.因此当你执行`g.getVertex("id123")时,它知道引用"vid",这样你就不必输入它. (2认同)