Neo4j Cypher唯一约束与索引

时间:2014-01-20 20:32:03

标签: neo4j

我正在创建具有属性的Nodes City Name和ID.City节点可以在Id上编制索引。我想要唯一的节点。

现在填充数据库时,我希望获得City节点,否则我想创建一个City节点。

最好的方法是什么?

创建Cypher执行引擎和唯一约束。然后使用MERGE创建一个唯一的节点。

或类似

Check if the City with that id is present **Match 
START n=node:City(id = { id }) RETURN n**

if n==null Create the Node

哪个快?如果我不为城市编制索引怎么办?

2 个答案:

答案 0 :(得分:0)

Cypher是安全的,因为它需要正确的锁。

Java版本可能会快一点,但您必须自己在单个root-lock-entity上创建写锁定,以确保在任何情况下都不会有多个线程访问该代码/数据。

如果没有索引,您必须扫描整个数据库以检查重复项。

答案 1 :(得分:0)

使用http://docs.neo4j.org/chunked/stable/query-merge.html

中的信息
MERGE (aCity:CITY {Id: '1', Name: 'aName') return aCity;

如果该节点不存在,则只会创建该节点。如果节点已存在,则返回现有节点。

注意 - 如果名称拼写不同,即使Id与现有节点相同(将执行所有字段的完全匹配),也将创建新节点。如果这不是您想要的功能,则需要使用上述链接中描述的ON MATCH功能,并在Id上添加唯一约束