【图数据库内核】属性图 · Store Format · Expand · Cypher 计划边界

💡 原文中文,约4700字,阅读约需11分钟。
📝

内容提要

本文介绍图数据库内核系列文章,聚焦属性图存储与遍历。内容涵盖Neo4j的record/block格式、邻接代价模型、索引、Cypher计划及事务处理,并对比TinkerPop、JanusGraph等引擎。系列共16篇,已发布13篇,旨在帮助工程师理解图存储底层机制及选型,区分原生图引擎与关系库递归CTE的适用场景。

🔎

延伸解读

阅读路径规划

系列共16篇,已发布13篇,并提供了依赖关系图和推荐阅读路径。对于快速建立坐标系,建议按1→2→3→4→5→9→16的顺序阅读;若关注存储细节,则走3→4→5→6→15;查询与计划方向可选7→9→10→15;多引擎对比则按1→13→14→16。这种规划有助于读者根据自身需求高效获取知识。

实验与版本锚定

文章强调实验约定:无环境不写命令输出,EXPLAIN/PROFILE仅贴真实跑过的片段,版本锚定Neo4j Operations Manual 2026.07。这保证了内容的可靠性和可复现性,读者在参考时应留意版本差异,避免因版本更新导致行为变化。

选型关键问题

文章提出选型关键问题:何时必须使用原生图引擎,何时Postgres加递归CTE或外置图层足够。这需要权衡图查询的代价中心是边的局部性,以及索引只能解决标签过滤,无法解决深度遍历。读者可结合自身场景,参考第14–16篇的对照内容进行决策。

Q&A

图数据库内核系列文章主要关注哪些方面?

该系列文章聚焦属性图的存储与遍历,涵盖Neo4j的record/block格式、邻接代价模型、索引、Cypher计划及事务处理,并对比TinkerPop、JanusGraph等引擎。

图查询的代价中心是什么?

图查询的代价中心是边的局部性,而非点本身。

Neo4j的block格式有什么特点?

Neo4j的block格式(Enterprise推荐)使用128字节的主块(block.x1.db),支持动态溢出(xd/big_values),并使用B+树处理dense节点,以优化一次hop的读路径。

索引在图数据库中能解决什么问题,不能解决什么问题?

索引可以解决标签过滤问题,但无法解决深度遍历问题。

Cypher计划受哪些因素影响?

Cypher计划受存储格式和基数估计的影响,可能导致计划不佳。

何时必须使用原生图引擎,何时Postgres加递归CTE或外置图层足够?

当需要深度遍历和复杂图算法时,原生图引擎更合适;对于简单查询,Postgres加递归CTE或外置图层可能足够。具体选型需根据场景判断。

系列文章推荐的阅读路径有哪些?

推荐路径包括:必读核心(1→2→3→4→5→9→16)、存储深挖(3→4→5→6→15)、查询与计划(7→9→10→15)、对照选型(1→13→14→16)和完整通读(1→…→16)。

系列文章的实验约定是什么?

实验约定包括:无环境不写命令输出,EXPLAIN/PROFILE仅贴真实跑过的片段,版本锚定Neo4j Operations Manual 2026.07。

🏷️

标签

➡️

继续阅读