图数据库内核:属性图 · Store Format · Expand · Cypher 计划边界
站内数据库栈已覆盖行存(PostgreSQL / InnoDB / SQLite)、列存与湖仓、流与查询引擎、RocksDB、向量、Redis、全文、TiKV / FoundationDB、WiredTiger。db-frontier 与 llm-infra 又把 GraphRAG / 知识图谱应用层钉在检索叙事上。仍缺一层:属性图作为一等公民时,边与邻接如何落盘、一次 hop 走哪些指针、超节点如何改写 I/O、Cypher 计划如何被存储卡住。
本系列回答:MATCH (a)-[:R]->(b)
从模型到 store format、page cache、索引与 expand
的完整代价链,以及何时必须上原生图引擎。
写:
- 属性图 vs RDF;邻接表 / CSR / 原生指针的代价模型。
- Neo4j
standard/aligned/high_limit/block(Operations Manual Store formats)。 - Relationship chain、dense node、property 布局与 page cache。
- 标签 / 类型 / 属性索引与约束;全文与向量属性边界。
- Expand、变长路径与 Cypher 计划入口。
- 事务与高可用边界;TinkerPop / JanusGraph / TigerGraph 对照。
- 生产排障与 GraphRAG 接口选型。
不写:完整 Cypher / GQL 语言教程、Aura 定价、未实测跨引擎延迟排行、GNN 训练全书、RDF/SPARQL 全书、Fabric 分布式查询全书。
系列状态:01–13 已发布;14–16 待写(2026-08-09)。 规划见 PLAN.md。无本机 Neo4j 环境则不粘贴伪造
SHOW DATABASES/PROFILE输出。
版本锚定:Neo4j Operations Manual(Product Version 2026.07 / current)Database internals → Store formats;Enterprise 推荐
block(5.23 起standard/high_limit弃用路径)。Community 默认aligned。对照引擎文档随各章钉版本。
适合谁看
- 知识图谱、风控关系、推荐边表要下沉到存储的平台 / 后端工程师。
- 读过向量引擎或 GraphRAG,要分清「图存储」与「图检索应用」的读者。
- 从 PG / RocksDB / WiredTiger 系列过来,需要第三种数据模型轴的工程师。
- 在原生图、关系库递归 CTE、外置图层之间做选型的架构师。
在知识栈中的位置
| 层 | 站内内容 | 本系列关系 |
|---|---|---|
| 行存 / LSM / 文档 | postgresql-kernel、rocksdb、wiredtiger | 第 01–02、14–16 篇对照 |
| 向量 ANN | vector-engine | 第 08、16 篇边界 |
| GraphRAG / 应用 | db-frontier、llm-infra | 第 16 篇接口;不重写检索叙事 |
| 查询引擎 | query-engine | 第 09–10 篇计划边界 |
| 图数据库内核 | 本系列 | 模型 → store → cache → index → expand → 计划 → 选型 |
一、这个领域最值得关注的 5 个问题
- 图查询的代价中心是「点」还是「边的局部性」? → 第 1–4、9 篇。
- 一次 hop 在 Neo4j 磁盘格式上走哪些指针?dense 节点改写什么? → 第 3–6 篇。
- 索引解决什么、解决不了什么?(标签过滤 vs 深度遍历) → 第 7–8 篇。
- Cypher 计划如何被存储与基数估计坑到? → 第 9–11 篇。
- 何时必须上原生图引擎,何时 Postgres + 递归 CTE / 外置图层够用? → 第 14–16 篇。
二、篇目依赖关系与推荐阅读路径
flowchart TD
A["01 Overview"] --> B["02 Adjacency cost"]
B --> C["03 Record layout"]
C --> D["04 Block format"]
D --> E["05 Page cache"]
E --> F["06 Write path"]
C --> G["07 Labels indexes"]
G --> H["08 Fulltext vector boundary"]
E --> I["09 Expand traversal"]
I --> J["10 Cypher plan"]
J --> K["11 Txn locks"]
K --> L["12 HA boundary"]
A --> M["13 TinkerPop JanusGraph"]
M --> N["14 TigerGraph compare"]
I --> O["15 Ops troubleshoot"]
N --> P["16 Selection GraphRAG"]
O --> P
| 路径 | 篇目 | 适合 |
|---|---|---|
| 必读核心 | 1 → 2 → 3 → 4 → 5 → 9 → 16 | 快速建立坐标系 |
| 存储深挖 | 3 → 4 → 5 → 6 → 15 | 页、指针、dense、写入 |
| 查询与计划 | 7 → 9 → 10 → 15 | Cypher / 慢查询读者 |
| 对照选型 | 1 → 13 → 14 → 16 | 多引擎 / GraphRAG |
| 完整通读 | 1 → … → 16 | 系统掌握 |
三、目录与每篇价值点
第一部分:模型与存储(01–06)
- 图引擎全景
- 属性图生态位;相对站内系列的缺口;五条坐标系与 16 篇路线。
- 邻接的代价模型
- 边表 JOIN、CSR、原生指针链、block 内联;统一 hop / \(k\) 跳代价语言。
- Neo4j
record 系布局
- 15/34/41/25 B 定长记录;sparse 链与 dense relationship group。
- Block
format
block.x1.db128 B、动态 xd / big_values、dense B+ 树与实体上限。
- Page
cache 与指针追逐
- 8192 B
页、
pagecache.size、hit_ratio;record/block 如何改写 fault 形态。
- 8192 B
页、
- 写入路径
- 建边挂链、升 dense、逻辑删除与
.id复用;写如何反咬读局部性。
- 建边挂链、升 dense、逻辑删除与
第二部分:索引、查询与事务(07–12)
- 标签
/ 类型 / 属性索引与约束
- LOOKUP / RANGE / TEXT / POINT;唯一与 KEY 约束;索引起点 vs 遍历。
- 全文与向量属性边界
- FULLTEXT / VECTOR(Lucene)相对 RANGE;OS 缓存与混合检索边界。
- 遍历与
Expand
- Expand(All/Into)、VarLengthExpand/Pruning、最短路径双向 BFS。
- Cypher
计划入口
- EXPLAIN/PROFILE、Estimated vs Rows、基数乘积与计划事故。
- 事务、锁与隔离
- read-committed、sparse/dense 建边锁、死锁与 MERGE 陷阱。
- 高可用与只读副本边界
- primary/secondary、Raft 写多数、bookmark 因果链与 secondary 滞后。
第三部分:对照、生产与收束(13–16)
- TinkerPop
/ JanusGraph
- structure/process、宽行邻接表双写、非必然 ACID、vertex-centric 索引。
- TigerGraph 与其它引擎对照句(待写)
- 对照选型句,不做延迟排名。
- 生产排障(待写)
- 超节点、爆炸路径、内存、慢查询清单。
- 选型与 GraphRAG 接口(待写)
- 何时原生图;与 llm-infra / db-frontier 互链。
四、先修与延伸
先修:会写基本 Cypher 或 SQL JOIN;可选 向量引擎全景。
延伸:
- db-frontier — GraphRAG / 数据库前沿应用层。
- vector-engine — 向量 ANN 与混合检索。
- postgresql-kernel — 递归 CTE / 关系库对照轴。
- query-engine — 计划与执行器词汇。
五、来源与实验约定
- A 级:Neo4j Operations Manual Store formats;Cypher / GQL 公开规范节选;TinkerPop / JanusGraph 官方文档;经典属性图 survey。
- B 级:Neo4j 工程博客(标版本);事故复盘。
- 实验:无环境不写命令输出;
EXPLAIN/PROFILE仅贴真实跑过的片段。
规划细节、逐章大纲与研究台账见 PLAN.md。
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【图数据库内核】图引擎全景:属性图作为一等公民的存储与遍历
定位属性图相对行存/LSM/向量/GraphRAG 的生态位;钉住邻接代价、Neo4j store format(record→block)、page cache、索引与 Expand、Cypher 计划五条坐标系,并以 Angles & Gutierrez 谱系与原生图争论收束系列路线。
【图数据库内核】Neo4j Block format:128 B 主块、动态溢出与 dense B+ 树
对照第 03 篇 record 指针链,钉住 Enterprise 推荐的 block 布局:block.x1.db 128 B 主块、node/relationship 动态 store、big_values、relationship dense 多根 B+ 树与实体上限;重写一次 hop 的读路径。
【图数据库内核】遍历与 Expand:从索引起点走到邻居的执行骨架
拆解 Cypher 遍历算子 Expand(All/Into)、OptionalExpand、VarLengthExpand(All/Into/Pruning)与最短路径双向 BFS;钉住路径爆炸、DISTINCT 剪枝、量化路径谓词,以及 expand 如何吃第 03–05 篇的 store 与 page cache。
【图数据库内核】邻接的代价模型:边表 JOIN、CSR 与原生指针为何不是同一件事
把同一逻辑图落成边表+索引、CSR、原生关系链与 Neo4j block 内联四条路径,用统一代价语言比较一次 hop 与 k 跳扩张;钉住幂律超节点与局部性,为后续 record/block 布局篇垫底座。