こんにちは、ノードとリレーションシップを作成/マージする際に次のエラーが発生します。それは必ずしも起こるとは限りませんが、しばらくして起こります。Neo4j-Python Connectorを使用してグラフを作成/マージする際のCypherError
CypherError: An unexpected failure occurred, see details in the database logs, reference number eaf50bff-deca-4055-9450-6a76c31534e4.
これはトレースバックです:作成/マージのため
---------------------------------------------------------------------------
CypherError Traceback (most recent call last)
<ipython-input-21-9700f3a5d3fa> in <module>()
7 tx.success = True
8 #tx.close()
----> 9 session.close()
/databricks/python/local/lib/python2.7/site-packages/neo4j/v1/session.pyc in close(self)
522 """
523 if self.last_result:
--> 524 self.last_result.buffer()
525 if self.transaction:
526 self.transaction.close()
/databricks/python/local/lib/python2.7/site-packages/neo4j/v1/session.pyc in buffer(self)
246 if self.connection and not self.connection.closed:
247 while not self._consumed:
--> 248 self.connection.fetch()
249 self.connection = None
250
私のコードはこれです:
for chunk in chunk_list:
with session.begin_transaction() as tx:
for record in chunk:
tx.run("MERGE (source:UID {userid : {m}, timestamp: {a}})"
"MERGE (target:UID {userid : {n}, timestamp: {a}})"
"MERGE (source)-[:HasConnection]-(target)", {"m": record.source, "n": record.target, "a": record.unix_timestamp_s})
tx.success = True
#tx.close()
session.close()
chunk_listは、レコードの複数のリストを含むリストです。 chunk_list内の各リストには複数の行(約10000)があり、各行にはソース、ターゲット、タイムスタンプの3つの列が含まれています。
chunk_list内の各リストについて、セッションを開いてからマージ操作を行ってからセッションを閉じます。
グラフが1000万ノードを超えると問題が発生します。 1日目はchunk_listに400万行があり、chunk_listに400万行があれば2日目に問題なく動作します。しかし、3日目に300万行があり、Neo4jグラフでノードの総数が1000万を超える場合、問題が発生し始めます。
UIDノードをuseridとtimestampの両方でマージしているので、userid + timestampの組み合わせがUIDのユニークな検索キーであることを訂正します。つまり、複数のUIDが存在する可能性があります。タイムスタンプ?または、useridがユニークなルックアップキーで、タイムスタンプを更新して接続を作成しようとしていますか? – InverseFalcon
同じユーザーIDである必要がありますが、マージ操作中にタイムスタンプが変更されます。 @InverseFalcon – sjishan