2016-11-06 125 views
-3

我打算为我当前的项目(一个REST API)使用Neo4j。我读过它不鼓励使用Neo4j的ID,因为ID可以在重新启动后重新使用以进行优化。但是,这些线程的日期可以追溯到2012年。在Neo4j的官方GitHub页面上,似乎他们承诺为Neo4j 2.x(早在2013年)解决此问题。现在是2016年,Neo4j是3.0。是否仍然不推荐使用Neo4j的内部ID?

所以我的问题是:有什么改变?在API中公开ID还是不安全的?还是我们仍然坚持使用UUID来保证唯一性?

+0

我可以问为什么这是downvoted? – Synch

回答

3

Neo4j内部ID不应该用于引用外部系统中的节点或关系。这些ID基本上是指向文件存储库中某处以引用节点或关系的偏移量。

正如您所指出的,随着数据被删除,文件存储中的这个空白空间可以被回收,这意味着内部ID可以被回收。

如果您指的是外部系统中的节点/关系,常用方法是生成UUID并将其作为属性存储在节点上(使用索引以便节点可以高效查找)。

在Neo4j 3.x中,有一个user defined function in the APOC library用于从Cypher生成UUID。例如:

CREATE (p:Person) 
SET p.name = "Will", 
    p.uuid = apoc.create.uuid() 
0

也看看https://github.com/graphaware/neo4j-uuid这会为您生成的UUID,并确保没有人可以更改或删除它们,而不需要改变你的查询。

+0

我试过在Spring Data Neo4j和Repository接口设置之前使用neo4j-uuid。我遇到了创建实体时uuid为null的问题(很可能是由于ORM缓存),所以我不得不放弃它。 – Synch

相关问题