Neo4j节点存储文件中关系ID描述与图示矛盾及多关系存储疑问
关于Neo4j节点存储文件的两个疑问解答
首先说你发现的“矛盾点”——其实这俩表述完全一致,只是术语叫法不同而已!官方书籍文字里提到的“与节点相连的第一个关系ID”,就是图6-4里标注的Nextrelid(准确来说是NextRelId,大小写差异不影响含义),它的作用就是指向该节点关联的第一条关系的存储ID,本质是同一个东西,不存在矛盾~
然后聊聊节点只存第一个关系,其余关系怎么存储的问题:
Neo4j里的关系是用双向链表的方式组织的。每个关系的存储记录(存在neostore.relationshipstore.db中)会包含两个关键字段:
- 指向当前节点的下一个关系ID(
NextRelId) - 指向当前节点的上一个关系ID(
PrevRelId)
当你要遍历某个节点的所有关联关系时,就从节点记录里的第一个关系ID出发,顺着每个关系记录里的NextRelId依次往下找,直到遇到-1(表示链表末尾),就能拿到该节点的所有关联关系。反过来也可以通过PrevRelId往前遍历,这种链式结构既节省了节点存储的空间,又能高效完成全关联关系的遍历。
内容的提问来源于stack exchange,提问作者Pantea
相关产品推荐
相关产品推荐

