Data structures Neo4j如何在内部存储数据?

Data structures Neo4j如何在内部存储数据?,data-structures,neo4j,Data Structures,Neo4j,我的问题是从开发人员的角度(不是特别尊重用户)提出的,可能有点混乱。 我想知道节点和关系的结构是如何逻辑地存储在数据库中的。比如,当我说我有很多信息的时候。在哪里然后答案是,在书中,无论是网格形式还是页面上的线条形式。对于RDBMS,数据以网格/表格格式存储。但我无法理解图形是如何存储在Neo4j/graph数据库中的。 我使用的是neo4j客户机2.1.2。非常过时,但这为您提供了neo4j逻辑表示的良好概述 节点引用: 它的第一个标签(我猜标签存储为单链接列表) 其第一个属性(属性组织为单

我的问题是从开发人员的角度(不是特别尊重用户)提出的,可能有点混乱。 我想知道节点和关系的结构是如何逻辑地存储在数据库中的。比如,当我说我有很多信息的时候。在哪里然后答案是,在书中,无论是网格形式还是页面上的线条形式。对于RDBMS,数据以网格/表格格式存储。但我无法理解图形是如何存储在Neo4j/graph数据库中的。 我使用的是neo4j客户机2.1.2。

非常过时,但这为您提供了neo4j逻辑表示的良好概述

节点引用:

  • 它的第一个标签(我猜标签存储为单链接列表)
  • 其第一个属性(属性组织为单链表)
  • 它的开始/结束关系
关系组织为双链接列表。 关系指向:

  • 其第一个属性(与节点相同)
  • 其开始节点的前置和后续关系
  • 其结束节点的前置和后继关系
由于这种链式结构,遍历的概念(即查询数据的方式)很容易出现。这就是为什么像Neo4j这样的图形数据库擅长遍历图形结构化数据的原因


我的粗略猜测是,由于Neo4j版本2.1(和),节点的关系是按类型划分的。通过这样做,例如,如果一个节点N是5个a型关系和500万个B型关系的起始节点,则遍历N的a型关系仍然是O(N=5)。

想想参考链和图:我很难理解如何确定其起始节点的前置和后续关系?一个节点可以有多个传入边或多个传出边,那么哪一个是前一个和下一个?可以假设关系是按插入顺序存储的(并且很可能按类型分组,以便一种关系类型的高基数不会影响低基数类型的查找时间).我看不到双链接列表结构,我在谷歌上到处搜索,仍然看不到开始和结束节点的prev和next是如何填充和更新的?你能再解释一下吗?它看起来不像是一个邻接列表,恐怕没有文档记录。唯一的选择是读取源代码,因为这是Neo4j的“内部酱汁”。是的,有任何特定的文件吗?导航需要很多时间。