首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在neo4j中索引和内部ID有什么区别?

在neo4j中索引和内部ID有什么区别?
EN

Stack Overflow用户
提问于 2019-06-05 05:57:10
回答 1查看 237关注 0票数 2

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

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

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

在SQL中,语法看起来太复杂了,因为我必须遍历几个表才能建立简单的连接,而neo4j很容易就能完成……据我所知,MongoDb独立地存储数据,而且,由于我的数据是连接的,它似乎并不真正适合数据结构。但是,再说一次,由于我对这一主题的了解有限,也许我没有做出正确的选择?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 06:15:24

Graph dbs是像这样的连接数据的理想选择,它比关系dbs或文档存储更适合存储和查询。

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

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

按内部ID查找

  1. -这总是很快的,但是我们不建议将这些内部ID保留在查询上下文之外。这样做的原因是,当图形元素被删除时,它们的ids就有资格重新使用。如果您在Neo4j外部保留内部ids,并在以后使用它们执行查找,则您期望它引用的任何内容都可能已被删除,并且可能不指向任何内容,或者指向具有完全不同数据的某个新节点。
  2. 按索引查找-这是您希望对其使用CREATE index (或添加唯一约束,如果对您的模型有意义)的位置。当您使用与索引关联的标签和属性(或属性)进行匹配或合并时,这是对所需节点的快速直接查找。
  3. 按标签扫描查找-如果您使用模式中存在的标签执行匹配,但不表示要使用索引(标签/属性组合不存在索引,或者只有标签但没有属性),则将执行标签扫描,并对给定标签的每个节点进行匹配和过滤。
  4. All nodes scan -如果您在匹配模式中没有提供任何标签,那么数据库中的每个节点都将被扫描和过滤。随着数据库的增长,这是非常昂贵的。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56451847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档