第1章 选型背景与业务约束

本地数据持久化技术选型的第一步,不是翻阅各数据库的特性清单,而是先搞清楚业务场景对持久化层施加了哪些刚性约束。数据规模、读写频率、离线要求、安全合规——这四个维度决定了后续所有技术方案的边界与取舍。任何脱离业务约束的选型,都会在落地阶段暴露出致命缺陷。

核心认知: 技术选型本质上是约束求解过程。四个维度构成一个四维决策空间,每个维度的取值区间直接压缩或扩展了候选技术的可选范围。先界定约束,再评估技术,是架构师的基本工作顺序。

1.1 为什么选型必须先看约束

业务场景不会主动告诉你该用 SQLite 还是 RocksDB,但会通过以下方式暴露约束:

  • 数据规模:单机存 100 MB 和存 100 GB 的存储引擎选择完全不同;
  • 读写频率:写密集型(日志)与读密集型(配置缓存)对索引和维护开销的敏感度迥异;
  • 离线要求:纯在线场景可依赖云端同步,弱网或离线场景必须内置本地容错与冲突处理;
  • 安全合规:金融级加密与普通应用的数据保护策略在计算开销和接口复杂度上差一个数量级。

四条约束相互耦合:比如高安全加密会降低读写吞吐,大容量离线同步会推高存储成本。只有将四者同时纳入决策框架,才能避免“局部最优,全局不可用”的窘境。

常见误区: 团队常根据工程师的个人偏好(“我用过 XXX 数据库”)直接定技术栈,跳过约束分析。后果往往是上线后遇到性能瓶颈、合规审查不通过、或者离线数据丢失,被迫返工重构。约束分析不是理论空谈,而是风险前置的关键步骤。

1.2 四大核心约束维度

每个维度需要拆解为可量化的子指标,才能用于后续技术方案对比。下表汇总了四个维度的关键量化参数与选型影响范围:

维度 关键指标 对选型的影响范围 典型场景举例
数据规模 总量量级、年增长率、记录数、单条平均大小 存储引擎(B+树 / LSM-Tree)、分片策略、压缩算法、备份窗口 IoT 时序数据、用户行为日志、缓存预热数据
读写频率 读写比例、峰值 QPS、平均时延 SLA、写入模型(批量/实时) 索引结构、缓存层设计、连接池配置、WAL 策略 社交信息流、实时竞价、配置中心
离线要求 最长离线时长、同步触发方式、冲突处理策略、网络恢复后行为 同步方案(全量/增量/按需)、一致性模型(最终/强)、本地事务边界 移动端数据采集、边缘计算节点、离线地图
安全合规 加密标准(AES-256 / SM4)、数据主权(境内/跨境)、审计粒度 加解密性能开销、密钥管理方案、审计日志实现、合规认证路径 金融交易记录、医疗健康数据、政务档案
实践建议: 在项目启动阶段,用一个结构化的“约束采集表”向产品、运营、合规部门收集以上四个维度的量化数据。不要接受“数据量不大”“读写一般”这类模糊描述,必须落到具体数字或区间上。

1.3 约束交叉与权衡矩阵

四个维度并非独立存在,它们之间的相互影响才是选型决策的真正难点。下面用矩阵形式展示最主要的几组权衡关系:

维度对 权衡本质 典型表现 架构应对思路
数据规模 ↔ 读写频率 大容量存储与高吞吐访问的矛盾 数据量过亿后,全表扫描不可接受;索引维护成本随写入量上升 分层存储(冷热分离)+ 读写分离架构
数据规模 ↔ 离线要求 本地全量数据与设备存储容量的冲突 离线需要缓存大量数据,但移动端/边缘设备存储有限 按需同步 + 数据淘汰策略(LRU / TTL)
读写频率 ↔ 安全合规 加密/审计带来的性能开销与高吞吐需求的冲突 全量加密后写入吞吐下降 30%-50%;审计日志增加 IO 压力 硬件加速(TEE / 加密卡)+ 异步审计管道
离线要求 ↔ 安全合规 离线数据在设备上的安全存储与合规管控的难题 离线数据必须加密存储,但设备丢失后如何远程擦除 设备级加密 + 远程锁定策略 + 安全芯片绑定

从矩阵可以看出,没有一种持久化技术能同时在所有维度上达到最优。架构师的核心工作是根据业务优先级,在四维空间中定位最优解区域。

选型约束四维决策框架 相互制约 容量 vs 存储 性能 vs 加密 技术选型 决策点 数据规模 总量级 · 增长率 读写频率 读写比 · 峰值 QPS 离线要求 离线时长 · 同步策略 安全合规 加密标准 · 数据主权 约束清单 · 候选技术范围 选型输入 箭头方向:约束输入 → 决策 → 输出

1.4 落地第一步:输出约束清单

在进入具体技术评估之前,团队必须产出一份结构化的 约束清单,作为后续所有选型决策的基准参照。清单应包含每个维度的量化指标、来源(业务方/合规/运维)、以及优先级(必选/可选)。

以下是一个可直接用于项目启动的约束清单模板:

# 约束清单模板 v1.0
data_scale:
  total_size: "预估总量: ___ GB/TB"
  growth_rate: "年增长率: ___%"
  record_count: "记录数: ___ 万/亿"
  avg_record_size: "单条平均大小: ___ KB"

read_write_frequency:
  read_write_ratio: "读写比例: ___ : ___"
  peak_qps: "峰值 QPS(读): ___  |  峰值 QPS(写): ___"
  latency_sla: "平均时延要求: ___ ms"
  write_pattern: "写入模式: 批量/实时/混合"

offline_requirements:
  max_offline_duration: "最长离线时长: ___ h/d"
  sync_strategy: "同步策略: 全量/增量/按需"
  conflict_resolution: "冲突处理机制: 时间戳/版本号/CRDT/手动"
  network_recovery: "网络恢复后行为: 静默同步/用户确认"

security_compliance:
  encryption_standard: "加密标准: AES-256 / SM4 / 其他"
  key_management: "密钥管理方案: 硬件安全模块/软件密钥链/远程KMS"
  data_sovereignty: "数据主权要求: 仅境内/允许跨境/需本地化存储"
  audit_requirements: "审计要求: 操作日志/变更追踪/实时审计"
风险提示: 约束清单必须在架构设计阶段获得产品、合规、运维三方签字确认。项目中后期修改约束条件(如“数据量突然扩大10倍”或“新增跨境合规要求”)会导致选型推倒重来,代价极高。建议在清单中标注每个约束的置信度(高/中/低)和变更可能性。