跳转至

分块规则推荐

本页列出 Minecraft 存档场景下较常见的分块规则选择建议

这些规则并不都适合放进默认配置。默认配置应保持保守, 只覆盖收益稳定、依赖少、误判概率低的文件类型

推荐表

文件类型 patterns 推荐算法 阈值 推荐度
Minecraft Anvil 文件 *.mca fixed_auto 256 KiB ★★★★★
日志文件 *.log fixed_128k 10 MiB ★★★★★
SQLite 主数据库 *.db, *.sqlite, *.sqlite3 fastcdc_32k 20 MiB ★★★☆☆
SQLite WAL 文件 *.db-wal, *.sqlite-wal, *.sqlite3-wal, *.wal fixed_128k 10 MiB ★★★☆☆
JSONL 记录文件 *.jsonl fixed_128k 10 MiB ★★★☆☆
JSON / YAML 状态文件 *.json, *.yaml, *.yml fastcdc_32k 20 MiB ★★☆☆☆

Minecraft Anvil 文件

Minecraft 世界中的 region、entities、poi 等数据通常会储存在 .mca 文件中

这类文件内部以 4 KiB 页为基本组织单位。世界运行时, 只有一部分区块、实体或 POI 数据会发生变化,因此旧备份中的大量页面有机会被复用

推荐使用 fixed_auto。它以 128 KiB 作为默认粒度,在检测到变化窗口后再退到 4 KiB 粒度, 能在元数据开销和复用效果之间取得比较好的平衡

示例配置:

{
    "algorithm": "fixed_auto",
    "file_size_threshold": 262144,
    "patterns": [
        "*.mca"
    ]
}

SQLite 主数据库

不少插件会使用 SQLite 储存权限、经济、记录、地图缓存或其他结构化数据

主数据库文件常见后缀包括 .db.sqlite.sqlite3。 这类文件通常不是单纯追加写,数据库页可能在文件中间被修改、移动或重写

推荐使用 fastcdc_32k。CDC 根据内容决定分块边界,比固定大小分块更能适应数据库内部局部变化

这类规则不建议放入默认配置,因为它会引入 pyfastcdc 可选依赖, 并且不是所有 .db 文件都足够大或具备稳定的复用收益

示例配置:

{
    "algorithm": "fastcdc_32k",
    "file_size_threshold": 20971520,
    "patterns": [
        "*.db",
        "*.sqlite",
        "*.sqlite3"
    ]
}

SQLite WAL 文件

SQLite 在 WAL 模式下会将新写入先记录到 WAL 文件中,常见后缀包括 .db-wal.sqlite-wal.sqlite3-wal.wal

WAL 文件的写入模式通常接近尾部追加,因此固定大小分块可以稳定复用前面的旧内容,并避免 CDC 依赖

推荐使用 fixed_128k。相比 4 KiB 或 32 KiB 粒度,它能显著减少数据块数量,对大型 WAL 文件更稳妥

需要注意的是,WAL 文件可能在 checkpoint 后被截断或重建。如果它在备份之间经常整体重置,分块收益会下降

示例配置:

{
    "algorithm": "fixed_128k",
    "file_size_threshold": 10485760,
    "patterns": [
        "*.db-wal",
        "*.sqlite-wal",
        "*.sqlite3-wal",
        "*.wal"
    ]
}

日志文件

日志文件通常以 .log 结尾,常见于服务端本体、MCDR、插件或模组的运行日志

大日志的典型写入模式是尾部追加。对于这种文件, 固定大小分块的边界不会因为追加内容而影响旧数据块,已有内容可以持续复用

推荐使用 fixed_128k。它不需要 CDC 依赖,元数据开销也比更小的固定块低很多

示例配置:

{
    "algorithm": "fixed_128k",
    "file_size_threshold": 10485760,
    "patterns": [
        "*.log"
    ]
}

JSONL 记录文件

部分插件或辅助工具会使用 JSONL 记录事件、统计或历史数据,每一行通常是一条独立记录

如果文件主要以追加记录的方式增长,它和日志文件类似,适合使用固定大小分块

推荐使用 fixed_128k。它能稳定复用旧内容,并避免对 CDC 可选依赖的要求

示例配置:

{
    "algorithm": "fixed_128k",
    "file_size_threshold": 10485760,
    "patterns": [
        "*.jsonl"
    ]
}

JSON / YAML 状态文件

.json.yaml.yml 文件在插件生态中很常见,但大多数配置文件都很小,不值得分块

只有当这类文件变成大型状态文件时,才值得考虑分块。 例如某些插件将玩家数据、领地数据、统计数据或缓存数据写入单个大型文本文件

推荐使用 fastcdc_32k。JSON / YAML 被重写时,插入、删除或字段变化可能导致后续内容偏移, CDC 比固定大小分块更能保留可复用片段

这类规则应谨慎启用。如果文件每次保存都会重新排序字段、刷新大量时间戳或整体改写,分块收益通常不稳定

示例配置:

{
    "algorithm": "fastcdc_32k",
    "file_size_threshold": 20971520,
    "patterns": [
        "*.json",
        "*.yaml",
        "*.yml"
    ]
}

不推荐的对象

下列文件通常不适合作为分块规则目标:

  • 已压缩文件,例如 .gz.zip.zst
  • 归档或程序包,例如 .jar
  • 图片、地图瓦片或其他媒体文件
  • 大量很小的配置文件
  • 每次保存都会整体随机重写的文件

这些文件即使被分块,也通常只能增加哈希、数据库记录和打包条目的开销