【发布时间】:2017-01-04 01:38:27
【问题描述】:
您好,我在尝试创建/合并节点和关系时遇到以下错误。它并不总是发生,但它偶尔会发生。
CypherError:发生意外故障,详情请参阅 数据库日志,参考号 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),每行包含三列,源、目标和时间戳。
对于 chunk_list 中的每个列表,我们打开一个会话,然后执行合并操作,然后关闭会话。
当图超过 1000 万个节点时,问题开始发生。假设对于第 1 天,chunk_list 有 400 万行,它可以正常工作,对于第 2 天,如果 chunk_list 有 400 万行,它也可以正常工作。但是如果在第 3 天有 300 万行并且 Neo4j 图中的总节点总数超过 1000 万,那么问题就开始发生了。
【问题讨论】:
-
由于您正在合并具有用户 ID 和时间戳的 :UID 节点,我是否正确,因为用户 ID + 时间戳组合是 :UID 的唯一查找键,这意味着可以有多个 :UID相同的用户标识但不同的时间戳?还是 userid 是唯一的查找键,而您正在尝试更新时间戳并创建连接?
-
它应该是相同的用户ID,但时间戳会在合并操作期间改变。 @InverseFalcon