我遇到Neo4J的问题,系统内存不足以执行我的查询。我已经将堆的大小增加到3GB,这导致了相同的问题,只是在数据集损坏的同一点耗尽内存需要更长的时间(我已经很长时间了损害过程因此数据库中已有大量数据,但数据并不多.DB为350MB,有176780个节点和259463个关系)。
也就是说,我通过REST接口将我的查询与节点发送到Neo4J,它变得没有响应。很长一段时间没有回复,最终它告诉我内存不足。堆大小的增加唯一的做法是使这个超时更长。在调试日志中,我看到垃圾收集器完全锤击了应用程序线程。对于数据的大部分初始部分,它似乎工作得很好,而且我不太确定这里发生了什么。
我觉得这可能是与我的查询做一些愚蠢相关的问题,因此我在下面添加了代码示例,希望有人发现错误,如果它存在的话。
首先,我想要实现的目标:
为了更直观地展示这一点,在下面的图像A和B必须合并。 " CustomerNodes"的总和对于这两个" CustomerHashes" (但可以是n个节点,因此是无界搜索)通过" HashInput"是>因此,他们需要合并。
然后是实际的查询:
查询1): 我在这里生成一个密码查询,结果是:
`
MERGE (base: ${labels} { ${stringifiedProperties} } )
WITH base
MATCH (connectingNode: ${labelsConnectingNode} { ${ connetingNodeProperties } } )
MERGE ( base )-[r:${relationshipLabell} { ${ relationshipProperties } } ]->(connectingNode)
`
查询2(这是阻止的那个)):
`
MATCH
(seed:HashInput { customer_email: '${cleanEmail}' })-[:CONSISTS_OF*]-(Hashes:CustomerHash)
-[:IS_LIKELY_CUSTOMER]->
(CustomerNodes:Customer)
WITH
count( DISTINCT ID( CustomerNodes ) ) AS countCustomerNodes,
collect(CustomerNodes) as CustomerNodesList,
collect(Hashes) as hashList,
collect(DISTINCT Hashes._customer_email) as eMails,
collect(DISTINCT Hashes._card_fingerprint) as cardFingerprints
WHERE countCustomerNodes > 1
MERGE (newCustomerNode:Person:Customer { eMails: 0, cardFingerprints : 0 })
SET newCustomerNode.eMails = eMails
SET newCustomerNode.cardFingerprints = cardFingerprints
WITH
hashList,
CustomerNodesList,
newCustomerNode
UNWIND hashList as Hashes
WITH
Hashes,
CustomerNodesList,
newCustomerNode
UNWIND CustomerNodesList as CustomerNodes
DETACH DELETE CustomerNodes
MERGE (Hashes)-[r:IS_LIKELY_CUSTOMER]->(newCustomerNode)
`