3

オブジェクトを生成するフレームワークを使用しNodeていますが、既に ID が割り当てられています。ここで、フレームワークで制御される同じ ID を持つ Titan 頂点に変換する必要があります ( でアクセス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);
   ...

エラー:

java.lang.IllegalArgumentException: Name is reserved: id

でも許されないらしい。セカンダリ ID を模倣するために偽のプロパティを使用する必要がありますか? タイタンにはそれを行う方法がありますか?

ありがとう!

4

2 に答える 2

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]

IdGraph要素 ID 自体を割り当てているかのように表示できることがわかります。舞台裏では、実際にはキー インデックスを使用しているだけです。

于 2013-07-01T10:51:01.730 に答える
1

@Stephen、gremlinターミナルについては言えませんが、Titan Java APIを介してこれを試してみましたが、うまくいきませんでした。ID グラフで頂点を作成する際に ID を渡した後でも、デフォルトの ID がノードに割り当てられていました。

于 2014-03-12T05:06:59.153 に答える