我正在创建具有属性的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
哪个快?如果我不为城市编制索引怎么办?
答案 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上添加唯一约束