gpt4 book ai didi

python - neo4j中索引和内部ID有什么区别?

转载 作者:行者123 更新时间:2023-12-01 00:52:46 24 4
gpt4 key购买 nike

我正在设置数据库,有时需要使用 ID。起初,我将 ID 作为属性添加到我感兴趣的节点,但意识到我也可以只使用 Neo4j 的内部 id“”。然后我偶然发现了 CREATE INDEX ON :label(something) 并想知道这到底会做什么?我认为索引和 the 是同一件事吗?

这可能是一个愚蠢的问题,但由于我是数据库的初学者,我可能会错过其中一些概念。

此外,我一直在阅读有关使用哪种数据库(mySQL、MongoDB 或 neo4j)的信息,并决定使用 neo4j,因为我的数据几乎遵循图形结构。 (它将用于构建代谢模型:连接基因->蛋白质-> react ->化合物)

在 SQL 中,语法似乎太复杂了,因为我必须遍历几个表才能建立 Neo4j 很容易完成的简单连接......据我了解,MongoDb 独立存储数据,并且由于我的数据是连接的,因此它似乎并不真正适合数据结构。但同样,由于我对这个主题的了解有限,也许我没有做出正确的选择?

提前致谢。

最佳答案

图形数据库非常适合此类连接数据,它比关系数据库或文档存储更适合存储和查询。

就索引和 ID 而言,这里是 index section文档的要点,但其要点是这与 Neo4j 如何查找起始节点有关。 Neo4j 仅使用索引来查找这些起始节点(尽管在 3.5 中,当我们像这样进行索引查找时,如果您对索引属性有 ORDER BY,它将使用索引来增强排序的性能)。

以下是 Neo4j 将根据可用性尝试使用的内容,从最快到最慢:

  1. 按内部 ID 查找 - 这总是很快,但我们不建议在查询上下文之外保留这些内部 ID。原因是当图形元素被删除时,它们的 id 就可以重用。如果您将内部 id 保留在 Neo4j 之外,并稍后对它们执行查找,那么您期望它引用的任何内容都有可能已被删除,并且可能指向任何内容,或者可能指向某个具有完全不同的新节点数据。

  2. 按索引查找 - 您希望在此处使用 CREATE INDEX ON(或添加唯一约束,如果这对您的模型有意义)。当您使用与索引关联的标签和属性(或多个属性)进行 MATCH 或 MERGE 时,这是对所需节点的快速直接查找。

  3. 通过标签扫描查找 - 如果您使用模式中存在的标签执行 MATCH,但无法使用索引(标签/属性组合不存在索引,或者仅存在标签但存在)无属性),然后将执行标签扫描,并且给定标签的每个节点将被匹配和过滤。随着添加更多带有这些标签的节点,这会变得更加昂贵。

  4. 所有节点扫描 - 如果您在 MATCH 模式中未提供任何标签,则数据库中的每个节点都将被扫描和过滤。随着数据库的增长,这是非常昂贵的。

您可以解释或分析查询以查看其查询计划,这将向您显示使用哪种查找方式来查找起始节点,以及执行查询的其余操作。

一旦找到一个或多个起始节点,Neo4j 就会使用关系遍历和过滤来扩展并查找与所需模式匹配的所有路径。

关于python - neo4j中索引和内部ID有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56451847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com