【问题标题】:Are Neo4J node ids optimized for access?Neo4J 节点 ID 是否针对访问进行了优化?
【发布时间】:2013-06-04 22:59:36
【问题描述】:

我正在使用 neo4j 构建一个大型图形数据库。

我有自己的外部索引,它为我提供了相关节点的标识符,用于进一步的 neo4j 图遍历。换句话说,当我开始查询数据库时,我已经有了起始节点 ID。

我的问题是:如果我使用 neo4j/lucene 索引访问相关节点,节点查找会更快吗?

或者是这样的查询:

START n=node({ids})

已经针对节点访问进行了优化,使用以下方法无法获得任何东西:

START n=node:nodeIndexName(key={value})

?

谢谢,

【问题讨论】:

    标签: indexing neo4j nodes


    【解决方案1】:

    是的。 Neo4j 针对 Node ID 进行了优化,因为在持久化级别,所有节点都是一个块,因此访问节点 100 就像访问块 100。

    我会警告你,如果你删除它,Neo4j 不保证节点 ID。 Neo4j 回收 ID。因此,如果在您的数据库生命周期中删除并添加多个节点,您的外部条目可能是“有效的”,但不是您所期望的。

    //编辑:另外,为什么不直接使用 Lucene 来执行查找?当然访问节点 ID 会更快,但这是 Lucene 在您进行查找时所做的,所以key:name, value:frank 将返回node id 5123,neo4j 将返回与该 ID 对应的节点。

    【讨论】:

    • 说得好。如果您要进行外部查找,最好制作自己的标识符。
    • @WesFreeman 没错,只需使用 UUID 作为属性和索引。
    • @Nicolas:谢谢,我实际上使用 Lucene 进行查找,但我的查找是基于具有特殊语法和专用令牌流的复杂全文查询,因此我目前在外部运行它们。查找的结果是节点 ID。所以我现在会坚持下去,看看这是否会产生你提到的那种持久性问题......
    • 更安全的选择是在 Neo4j 中使用 UUID 作为属性/lucene 索引,并在您想要进行外部查找时将该 UUId 存储在外部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多