Neo4j:新闻源链接列表并行插入

时间:2014-07-06 18:22:44

标签: neo4j cypher

我在Neo4J中遇到了并行插入问题。我一直用这种方式开发包含链表的新闻源:

(Resource)-[:NEWS]->(Latest_New)-[:NEXT]->(Second_latest)-[:NEXT]->...

我有以下查询,以便在列表的头部插入([:NEWS] - >(latest_new)):

CREATE CONSTRAINT ON (c:New) ASSERT c.head_id IS UNIQUE

MERGE (head: New {head_id: unique_id})
REMOVE head.head_id
WITH head
MATCH (resource)
WHERE resource.uid = resource_uid
OPTIONAL MATCH (resource)-[rel:NEWS]->(last_head)
WITH resource,head,rel, collect(last_head) as previous
DELETE rel
FOREACH (x IN previous | CREATE resource-[:NEWS]->(new_head:New {head_id: unique_id})-[:NEXT]->x)
WITH resource, head, rel
WHERE rel IS NULL
CREATE resource-[:NEWS]->head
SET header.head_id = unique_id

当我依次运行此查询时,一切都很顺利。另一方面,当我同时运行它时,它只创建没有关系的空(新)节点,有时我遇到了死锁。我对MERO + UNIQUE CONSTRAINT和Neo4j中其他并行内容的锁定行为感到困惑。

你对失败的事情有什么想法吗?关于MERGE + UNIQUE CONSTRAINT的锁定beaviour的一些解释将是受欢迎的。谢谢。

0 个答案:

没有答案