我打算爲我當前的項目(一個REST API)使用Neo4j。我讀過它不鼓勵使用Neo4j的ID,因爲ID可以在重新啓動後重新使用以進行優化。但是,這些線程的日期可以追溯到2012年。在Neo4j的官方GitHub頁面上,似乎他們承諾爲Neo4j 2.x(早在2013年)解決此問題。現在是2016年,Neo4j是3.0。是否仍然不推薦使用Neo4j的內部ID?
所以我的問題是:有什麼改變?在API中公開ID還是不安全的?還是我們仍然堅持使用UUID來保證唯一性?
我打算爲我當前的項目(一個REST API)使用Neo4j。我讀過它不鼓勵使用Neo4j的ID,因爲ID可以在重新啓動後重新使用以進行優化。但是,這些線程的日期可以追溯到2012年。在Neo4j的官方GitHub頁面上,似乎他們承諾爲Neo4j 2.x(早在2013年)解決此問題。現在是2016年,Neo4j是3.0。是否仍然不推薦使用Neo4j的內部ID?
所以我的問題是:有什麼改變?在API中公開ID還是不安全的?還是我們仍然堅持使用UUID來保證唯一性?
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()
也看看https://github.com/graphaware/neo4j-uuid這會爲您生成的UUID,並確保沒有人可以更改或刪除它們,而不需要改變你的查詢。
我試過在Spring Data Neo4j和Repository接口設置之前使用neo4j-uuid。我遇到了創建實體時uuid爲null的問題(很可能是由於ORM緩存),所以我不得不放棄它。 – Synch
我可以問爲什麼這是downvoted? – Synch