Neo4j底层存储结构

免索引邻接是图数据库实现高效遍历的关键,那么免索引邻接的实现机制就是Neo4j底层存储结构设计的关键。

从宏观角度来说,Neo4j仅仅只有两种数据类型:
(1)节点(Node):节点类似于E-R图中的实体(Entity)。每一个实体可以有零个或多个属性,这些属性以key-value对的形式存在。属性没有特殊的类别要求,同时每个节点还具有相应的标签,用来区分不同类型的节点。
(2)关系(Relationship):关系也类似于E-R图中的关系(Relationship)。一个关系有起始节点和终止节点。另外,与节点一样,关系也能够有自己的属性和标签。

节点和关系分别采用固定长度存储,节点9字节,关系33字节。数据库可以根据ID直接计算记录的位置,其成本仅为O(1)。

节点存储文件用来存储节点的记录,文件名为neostore.nodestore.db。
格式为:Node:inUse+nextRelId+nextPropId

  • inUse:1表示该节点被正常使用,0表示该节点被删除。
  • nextRelId:该节点的下一个关系ID。
  • nextPropId:该节点的下一个属性ID。

关系存储文件用来存储关系的记录,文件名为neostore.relationshipstore.db。
格式为Relationship:inUse+firstNode+secondNode+relType+firstPrevRelId
+firstNextRelId+secondPrevRelId+secondNextRelId+nextPropId。

  • inUse,nextPropId:作用同上。
  • firstNode:当前关系的起始节点。
  • secondNode:当前关系的终止节点。
  • relType:关系的类型。
  • firstPrevRelId & firstNextRelId:起始节点的前一个和后一个关系的ID。
  • secondPrevRelId & secondNextRelId:终止节点的前一个和后一个关系的ID。

你可能感兴趣的:(Neo4j学习,Neo4j底层存储,Neo4j节点物理存储)