是否仍然不推荐使用Neo4j的内部ID?

时间:2016-11-06 17:41:48

标签: neo4j

我计划将Neo4j用于我当前的项目(REST API)。我不鼓励使用Neo4j的ID,因为ID可以在重启时重用以进行优化。然而,这些主题的日期可以追溯到2012年。在Neo4j的官方GitHub页面上,似乎他们承诺为Neo4j 2.x解决这个问题(早在2013年)。现在是2016年,Neo4j是3.0。

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

2 个答案:

答案 0 :(得分:4)

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()

答案 1 :(得分:0)

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