
无索引邻接 · Cypher 执行 · Raft 集群目 录一、导读二、原生图存储引擎2.1 存储文件结构2.2 无索引邻接Index-free Adjacency2.3 固定大小记录与页缓存三、Cypher 执行与事务引擎3.1 查询生命周期3.2 索引机制3.3 ACID 事务四、因果集群架构4.1 Core Servers 与 Raft 共识4.2 只读副本与读扩展4.3 因果一致性与书签4.4 Fabric 分析集群五、架构要点对比5.1 本篇小结一、导读第 01 篇认识了图数据库的定位与属性图模型。本讲以 Neo4j 为对象逐层拆解其架构底层是「原生图存储引擎」把节点、关系、属性直接落盘并实现无索引邻接中层是「Cypher 执行与事务引擎」将声明式查询编译为执行计划并保证 ACID上层是「因果集群」用 Raft 协议构建高可用与水平扩展。三层递进正是 Neo4j 性能与可靠性的来源。二、原生图存储引擎2.1 存储文件结构Neo4j 的存储层由三类固定大小的记录文件构成节点、关系、属性各司其职存储文件记录内容作用neostore.nodestore.db节点 ID 标签指针 属性指针 关系指针定位节点及其关联neostore.relationshipstore.db关系 ID 类型 起始/终止节点 双向链表指针维护关系拓扑neostore.propertystore.db属性键 值 下一个属性指针存储键值属性2.2 无索引邻接Index-free Adjacency每个节点记录直接包含指向其第一条关系的指针关系记录又通过 prev/next 指针构成双向链表串起同一节点的所有关系。这意味着遍历一条关系仅需一次 O(1) 指针跳转无需查询任何索引而关系库执行多跳 JOIN 要反复扫描 B 树索引开销随跳数指数增长。官方数据表明多跳查询比关系库快约 1000 倍。2.3 固定大小记录与页缓存所有记录采用固定字节长度带来两个关键收益给定 ID 可直接按偏移算出磁盘位置O(1) 寻址无需查找页表同时提升页缓存命中率避免变长字段导致的缓存行污染。生产环境建议将页缓存dbms.memory.pagecache.size设为数据集的 70%–80%并把数据文件与事务日志分置独立磁盘规避 I/O 竞争。三、Cypher 执行与事务引擎3.1 查询生命周期Cypher 是声明式查询语言执行经历四步解析 → 查询优化器规划器生成逻辑计划 → 转换为物理执行计划 → 由 Cypher Runtime 执行。规划器依赖统计信息各标签节点数、各类型关系数、索引选择性选择最有效执行方式执行计划会被缓存复用。示例// 声明式描述模式由规划器选择最优执行路径MATCH (a:Person {name:Alice})RETURN a3.2 索引机制Neo4j 5 提供多种索引RANGE范围、POINT空间、TEXT全文、向量索引加载于操作系统内存而非页缓存以及基于属性的 B 树索引。索引选择性的统计会随数据变化在后台采样db.resampleIndex() 可手动触发供规划器生成高效计划。3.3 ACID 事务与其他 NoSQL 不同Neo4j 是一个完全符合 ACID 的事务型数据库写事务具备原子性、一致性、隔离性、持久性事务中间状态与结果存于内存并在提交时落盘。运维可用 SHOW TRANSACTIONS 查看、TERMINATE TRANSACTIONS 终止运行中的事务保障数据可靠性。四、因果集群架构4.1 Core Servers 与 Raft 共识Neo4j 集群采用因果集群Causal Clustering自 3.1 起取代旧 HA 架构核心服务器Core Servers是集群「大脑」负责管理集群状态、领导者选举与事务处理。核心服务器间用 Raft 共识算法实现强一致所有写入事务必须提交到当前领导者领导者复制到多数派核心服务器后才认为提交成功从而保证持久性。生产建议最小 3 个核心服务器。4.2 只读副本与读扩展只读副本Read Replica Servers异步从核心服务器拉取事务日志并重放用于水平扩展读吞吐、隔离分析负载。写入仍走核心服务器读可分流到只读副本实现读写分离。4.3 因果一致性与书签集群的核心一致性保证是「因果一致性」若客户端在事务 B 中看到了事务 A 的结果则 B 之后的任何操作也一定能看到 A 的结果。这一保证通过传递事务书签bookmark实现客户端用 neo4j:// URI 连接时可利用书签确保读到已确认写入的数据。4.4 Fabric 分析集群面向超大规模读扩展或隔离分析负载Neo4j 提供 Fabric 复合图数据库通过 Cypher 整合多个数据孤岛 / 分片进行联合查询实现即时多集群查询与横向扩展无需额外代理。五、架构要点对比维度机制作用存储原生图存储 无索引邻接O(1) 关系遍历多跳高效缓存Page Cache堆外缓存热数据降低磁盘 I/O查询Cypher 声明式 执行计划规划器选最优路径事务ACID 事务数据可靠区别于其他 NoSQL高可用因果集群 Raft领导者选举、多数派提交扩展只读副本 Fabric读扩展、跨集群联合查询5.1 本篇小结本讲从存储、执行、集群三层拆解 Neo4j 架构原生图存储以指针跳转实现无索引邻接Cypher 经规划器编译为执行计划并以 ACID 事务保证可靠因果集群用 Raft 共识支撑高可用与读写分离。理解这三层是后续核心原理、部署与选型的基础。下一篇进入核心原理深入无索引邻接的物理实现、Cypher 模式匹配与图算法。