2016-11-06 127 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

相關問題