Neo4j,如何索引并给节点ID

我对neo4j有点新,我想用neo4j和nodejs开始构build一个应用程序。

据我所知,neo4j为每个创build的节点添加了id ,而这个id不应该在db外使用,这就意味着如果我有用户,那么用id来查看用户(创build用户时neo给出的id相同)不是这样聪明。

所以问题是:

  1. 什么将是最好的,为什么要找一个用户? 电子邮件? 可能是,但并不是应用程序中的每一件事都有一个像用户的电子邮件的唯一标识符

  2. 我看到几篇关于uuid ,让我们假设我正在使用它..我可以保存该字段与名称id保存吗? 或者我需要一些其他的名字?

  3. 如果我希望该字段用作索引,我是否需要做一些特殊的事情? (我希望通过id进行search的速度很快。)

  4. uuid生成一个非常长的string,是不是索引该string的开销? 索引数字更快,不是吗?

  5. 如果不使用uuid ,你认为是其他select?

1)最好的方式 – UUID。

2)是的。

3)不,你只需要添加索引到数据库。 例:

 CREATE INDEX ON :User(uuid) 

4)确实, id查找速度更快,特别是在Neo4j(由于存储实现)。 但是,使用UUID进行索引支持的查找performance非常好,大多数Neo4j用户都使用这个(如果在他们的域中没有另外的唯一标识符)。

5)UUID是最好的select。 特别是当你考虑到 – 如何在集群设置中生成ID。 UUID提供了生成唯一标识符的可能性,而不需要任何全局数据库locking等等。 在这里你可以阅读更多有关UUID的理论信息。


现有的Neo4j扩展可以为你生成UUID。 例如 – GraphAware / neo4j-uuid 。
在这个扩展中,您可以configuration属性名称,应该应用哪些节点/关系UUID等等。