Neo4j 不同的存储格式(store formats)的差异
发布于 17 小时前 作者 pangguoming 22 次浏览 来自 分享

参考官方:https://neo4j.com/docs/operations-manual/5/database-internals/store-formats/

Neo4j 存储格式概述

Neo4j 使用不同的存储格式(store formats)来将图数据持久化到磁盘上,每种格式针对特定的性能、容量和可扩展性需求进行了优化。截至 Neo4j 5.x 版本(2026 年 1 月,5.23 版本已发布),支持的格式包括 block、aligned、standard 和 high_limit。其中,block 格式是 Neo4j 5.22 及以后版本中 Enterprise Edition 新建数据库的推荐默认格式,具有最佳性能(基于块存储和数据内联)。aligned 格式是 Community Edition 和早期 Enterprise Edition 的默认格式。standard 和 high_limit 格式自 Neo4j 5.23 起已被弃用,不推荐用于新数据库,支持将于 2029 年 11 月结束。

这些格式的主要区别在于数据结构、实体容量上限、ID 分配方式、性能表现、磁盘占用以及迁移路径。以下详细说明每种格式,所有信息请以 Neo4j 官方文档(Operations Manual 5 版)的 Store formats 章节 及其子页面内容为准。

1. Block 格式

  • 格式版本:block-block-1.1
  • 引入版本:Neo4j 5.14(5.16 正式 GA)
  • 默认使用场景:Neo4j 5.22 及以后 Enterprise Edition 新建数据库(除非通过 db.format 配置覆盖)
  • 可用版本:仅 Enterprise Edition
  • 数据结构:基于块(block)的存储,采用内联(inlining)技术。属性与节点、关系共置于块中,提升数据局部性,减少指针跳转。与基于记录(record)的格式(链表式结构)形成对比。
  • 实体容量限制:
    • 节点:最高 2⁴⁸(约 281 万亿)
    • 关系:无限制
    • 属性:无限制
    • 标签:最高 2³¹(约 21 亿)
    • 关系类型:最高 2³⁰(约 10 亿)
    • 属性键:最高 2³¹(约 21 亿)
  • ID 分配:内部 ID 表示数据在存储文件中的物理位置。迁移到或从该格式时 ID 会被重新分配,可能导致外部引用 ID 的应用失效。
  • 性能表现:所有格式中最高,缓存效率高、页面故障少、I/O 操作少,适合高性能和大尺度图查询。
  • 磁盘占用:高效,开销最小。
  • 推荐使用场景:所有新 Enterprise Edition 数据库,尤其是需要高性能、可扩展性和内存效率的生产环境。
  • 迁移:可从 aligned、standard(以及有限情况下 high_limit)迁移而来。使用 neo4j-admin database migrate --to-format=“block” 离线执行,需要约 1 倍数据库大小的空闲磁盘空间,迁移后需重新填充索引。

2. Aligned 格式

  • 格式版本:record-aligned-1.1
  • 引入版本:Neo4j 5.0
  • 默认使用场景:Community Edition 数据库及 Neo4j 5.22 之前创建的 Enterprise Edition 数据库
  • 可用版本:Community 和 Enterprise Edition
  • 数据结构:基于记录,增加了对齐(alignment)优化,提升内存效率。数据以链表式结构存储,但记录带有填充以对齐边界。
  • 实体容量限制:
    • 节点:最高 2³⁵(约 343 亿)
    • 关系:最高 2³⁵(约 343 亿)
    • 属性:最高 2³⁶(约 687 亿)
    • 标签:最高 2³¹(约 21 亿)
    • 关系类型:最高 2¹⁶(65,536)
    • 属性键:最高 2²⁴(约 1678 万)
    • 关系组:最高 2³⁵(约 343 亿)
  • ID 分配:ID 对应存储文件中的物理偏移。迁移时重新分配。
  • 性能表现:优于 standard,但由于链表指针跳转,仍逊于 block。
  • 磁盘占用:因对齐填充略高于 standard。
  • 推荐使用场景:Community Edition 或旧 Enterprise 数据库,适用于容量在限制内的中等负载。
  • 迁移:可迁移至 block(推荐)或 high_limit(不推荐)。过程离线且 I/O 密集。

3. Standard 格式

  • 格式版本:record-standard-1.1
  • 引入版本:Neo4j 5.0(从早期版本演进)
  • 默认使用场景:旧版本数据库,非当前默认
  • 可用版本:Community 和 Enterprise Edition
  • 弃用状态:自 Neo4j 5.23 起弃用,将在下一个 LTS 版本(预计 2026 年 11 月)后移除支持
  • 数据结构:基础记录存储,无对齐优化,纯链表式结构。
  • 实体容量限制:与 aligned 相同(节点/关系 2³⁵,属性 2³⁶ 等)
  • ID 分配:物理位置 ID,迁移时重新分配。
  • 性能表现:基础水平,指针跳转导致较高延迟。
  • 磁盘占用:记录格式中最低。
  • 推荐使用场景:仅用于遗留兼容,不建议新建。应迁移至 block 或 aligned。
  • 迁移:可迁移至 aligned、block 或 high_limit(后者不推荐)。

4. High-Limit 格式

  • 格式版本:record-high_limit-1.1
  • 引入版本:Neo4j 5.0(从早期版本演进)
  • 默认使用场景:从不默认,必须显式指定
  • 可用版本:仅 Enterprise Edition
  • 弃用状态:自 Neo4j 5.23 起弃用,同 standard
  • 数据结构:记录格式,针对极端容量设计,使用更宽的 ID 和额外开销。
  • 实体容量限制:
    • 节点:最高 2⁵⁰(约 1 万亿亿,即 1 quadrillion)
    • 关系:最高 2⁵⁰
    • 属性:最高 2⁵⁰
    • 标签:最高 2³¹(约 21 亿)
    • 关系类型:最高 2²⁴(约 1678 万)
    • 属性键:最高 2²⁴(约 1678 万)
    • 关系组:最高 2⁵⁰
  • ID 分配:更宽位分配的物理位置 ID,迁移时重新分配。
  • 性能表现:因容量开销略差于 standard。
  • 磁盘占用:所有格式中最高。
  • 推荐使用场景:仅用于超出其他格式容量的极端大图;已弃用,应迁移至 block(注意 block 容量虽高但非无限)。
  • 迁移:仅可迁移至 block(迁移前会检查是否符合 block 容量限制)。

格式对比总结表

特性 Block 格式 Aligned 格式 Standard 格式 High-Limit 格式
数据结构 块存储 + 内联 记录 + 对齐 基础记录 记录 + 高容量设计
最大节点数 2⁴⁸(281 万亿) 2³⁵(343 亿) 2³⁵(343 亿) 2⁵⁰(1 万亿亿)
最大关系数 无限制 2³⁵(343 亿) 2³⁵(343 亿) 2⁵⁰(1 万亿亿)
最大属性数 无限制 2³⁶(687 亿) 2³⁶(687 亿) 2⁵⁰(1 万亿亿)
关系类型数 2³⁰(10 亿) 2¹⁶(65,536) 2¹⁶(65,536) 2²⁴(1678 万)
属性键数 2³¹(21 亿) 2²⁴(1678 万) 2²⁴(1678 万) 2²⁴(1678 万)
性能 最佳(低 I/O、高缓存效率) 良好 基础 略差于 standard
磁盘占用 高效 中等(对齐开销) 最低 最高(容量开销)
状态 活跃,Enterprise 推荐 活跃,Community 默认 已弃用(5.23) 已弃用(5.23)
可用版本 仅 Enterprise Community & Enterprise Community & Enterprise 仅 Enterprise
ID 分配 物理位置,迁移重分配 物理位置,迁移重分配 物理位置,迁移重分配 物理位置,迁移重分配
可迁移目标 N/A(目标格式) 到 block 或 high_limit 到 aligned、block 或 high_limit 仅到 block

附加说明

  • 查看当前格式:使用 Cypher SHOW DATABASES YIELD name, store 或命令行 neo4j-admin database info <database>。
  • 设置格式:新建数据库时通过 neo4j.conf 中的 db.format 配置,或在创建/导入时指定。
  • 弃用影响:standard 和 high_limit 将于 2029 年 11 月后失去支持,Enterprise 用户强烈建议迁移至 block以获得性能提升。
回到顶部