Cassandra をデータ ストアとして Titan 0.3.2 を実行しています。また、RexProを介して Titan と対話するためにrexpro-pythonを使用しています。
問題と質問:
この Python コードを実行すると:
>>> import rexpro
>>> conn = rexpro.RexProConnection('localhost', 8184, 'graph')
>>> conn.execute('g.addVertex(null, node_dict)', {'node_dict':{'my_dict':{}}})
{'_type': 'vertex', '_id': '2280164', '_properties': {'my_dict': {}}}
>>> conn.execute('g.commit()')
結果のノードを Gremlin コンソールで検索できます。
gremlin> g.v(2280164).map
==>{my_dict={}}
my_dict
マップが適切に作成されているように見えます。
gremlin> g.v(2280164).my_dict.getClass()
==>class java.util.HashMap
my_dict
ただし、新しいキーと値で更新できません:
gremlin> g.v(2280164).my_dict['abc'] = 123
==>123
gremlin> g.commit()
==>null
gremlin> g.v(2280164).map
==>{my_dict={}}
コンソールで最初に新しいオブジェクトにリセットmy_dict
すると、キーを追加しようとするabc
と期待どおりに機能します。
gremlin> g.v(2280164).my_dict = [:]
gremlin> g.v(2280164).my_dict['abc'] = 123
==>123
gremlin> g.v(2280164).map
==>{my_dict={abc=123}}
私の質問: my_dict
RexPro で作成された頂点で新しい KV ペアを更新するにはどうすればよいですか?
試行された回避策/解決策:
パラメータ化されていないバージョンの Python スクリプトを使用して頂点を作成すると、これと同じ問題が発生します。
>>> conn.execute('g.addVertex([my_dict:[:]])')
また、この問題に関連するかどうかはわかりませんが、コンソールで作成された新しいマップはLinkedHashMap
(一方、python/rexpro コードは を作成しましたHashMap
) のようです:
gremlin> g.v(2280164).my_dict.getClass()
==>class java.util.LinkedHashMap