◈ DB 选型参考
← 返回首页

Amazon DynamoDB

KV · 宽列 · 文档 #serverless #KV #NoSQL #单毫秒延迟 #GlobalTables #按量计费 #AWS锁定

AWS 的 serverless KV/文档数据库:按分区键哈希分片、单毫秒延迟与表规模无关、多 Region 可多活——但"无运维"的代价是把 DBA 的工作换成了容量建模与账单工程,访问模式设计错了比选错数据库更贵。

用 AI 深挖这款:
证据等级:官方文档 厂商口径 社区实测 社区共识 待验证

基本信息

项内容
厂商Amazon Web Services(美国)
起源2007 年 Dynamo 论文 → 2012 年 1 月 GA;2026 年已运营 14 年
许可证闭源商业,无开源版本(DynamoDB Local 仅为本地开发用 Docker 镜像,非开源发行版)
托管服务仅 AWS(这是它唯一的存在形态,无自建版)
主类型KV / 文档(NoSQL)
兼具类型向量检索(2026-08 GA)、CDC(DynamoDB Streams)
数据模型分区键(必选)+ 排序键(可选)的无模式 item,单 item 上限 400KB
一致性模型表内最终一致(默认)/ 强一致(可选,2x RCU);跨 Region 见 Global Tables
复制协议同 Region 内 3 AZ 同步复制官方文档;跨 Region Global Tables 另见深水区六

硬维度(47 项)

1 静态加密 / TDE 有

有官方文档。所有表默认 AES-256 落盘加密;三档:AWS owned key(默认)、AWS managed key(aws/dynamodb)、customer managed KMS key(自带轮换策略、CloudTrail 审计密钥使用)。注意:AWS owned key 无可见性,合规场景必须显式切 CMK。

2 TLS / 传输加密 有

有官方文档。所有 API 走 HTTPS/TLS;SDK 默认;支持 VPC endpoint 私有访问不走公网。

3 审计 部分支持

部分支持官方文档。CloudTrail 记录管理面 API(建表、改容量、改策略);数据面(GetItem/PutItem/Query)默认无审计,靠 CloudTrail data events(需单独启用、按量收费)或应用层日志。没有 SQL 审计日志式的"谁查了哪行"开箱能力。

4 认证与权限 有

有官方文档。无用户名密码,IAM SigV4 签名;细粒度访问控制(dynamodb:LeadingKeys 行级、dynamodb:Attributes 列级),多租户隔离的标准做法。

5 备份恢复 有

有官方文档。PITR 连续备份(2025-01 起保留期 1–35 天可配)+ 秒级时间点恢复;on-demand 全量备份(可永久保留);AWS Backup 集成。关键限制:恢复只能生成新表,不支持原地覆盖/回滚官方文档,"回滚到 10 分钟前"意味着切流量到新表。

6 可观测性 有

有官方文档。CloudWatch 指标(ConsumedRCU/WCU、ThrottledRequests、ReplicationLatency、SystemErrors 等);Contributor Insights 定位热 key/热分区;CloudTrail;DAX 有独立指标。慢查询概念不存在——只有"被节流的请求"。

7 连接模型 有

有官方文档。HTTPS API,无连接、无连接池——连接风暴问题天然不存在;但"连接"换成了"吞吐配额",突发超 2 倍历史峰值 30 分钟内仍可能被节流(社区技能文档口径)。

8 事务与隔离级别 有

有官方文档。TransactWriteItems(最多 100 项/4MB,2x WCU)、TransactGetItems(最多 100 项/4MB);ClientRequestToken 幂等;单 Region 内 ACID。限制:事务仅单 Region(MRSC Global Tables 不支持事务);默认读最终一致,ConsistentRead=True 得强一致(2x RCU)。

9 复制与一致性 有

有官方文档。表内 3 AZ 同步复制;读默认最终一致(通常 <1 秒收敛,厂商口径);跨 Region Global Tables:MREC(异步,last-writer-wins)或 MRSC(同步 quorum,需 3 Region 固定拓扑)。

10 扩展方式 有,在线

有,在线官方文档。存储驱动自动分区(无感);吞吐按 on-demand 自动或 provisioned/auto-scaling 调整;无纵向扩展概念。分区是"只增"逻辑,热 key 无法靠加分区解决(见深水区一)。

11 兼容性 部分支持

部分支持官方文档。专有 NoSQL API(GetItem/PutItem/UpdateItem/DeleteItem/Query/Scan/Batch/Transact)+ PartiQL(SQL 方言子集,功能弱于真 SQL);AWS SDK 全语言;DynamoDB Local 供本地开发。无 MySQL/PG/Oracle 协议,无开源发行版,迁出=重写数据访问层。

12 许可证与商业模式 闭源商业官方文档

闭源商业官方文档。按量付费:on-demand 按读写请求单元、provisioned 按 RCU/WCU-小时、存储 GB-月、PITR、备份存储、Global Tables 复制写(rWCU)、Streams 读取、DAX 另计;Standard-IA 表类降存储费。AWS 锁定是最大商业现实:无他云、无自建。

13 中文资料丰富度 有中文版但部分页面翻译滞后

中等社区共识。官方文档有中文版但部分页面翻译滞后;中文社区实践帖(CSDN/掘金/知乎)不少,但深度建模(单表设计、GSI 成本)内容多为英文。

14 性能与延迟特征 有

有(Serverless 下个位数毫秒 P99;热分区是坑)。

  • 官方口径:任意规模个位数毫秒 P99;DAX 提供微秒级缓存 厂商口径。
  • 按需/预置容量模式;热分区限流是主要性能坑,分区键设计是关键 社区共识。
  • 大 scan/跨分区查询贵且慢,建模时就要避免 社区共识。

15 合规与认证 有

有(继承 AWS 合规体系)。

  • AWS:SOC2、ISO27001、PCI DSS、HIPAA 等厂商口径厂商口径。
  • 中国区(北京/宁夏)参与等保测评 厂商口径。

16 成熟度与社区生态 有

有(2012 年 GA;Serverless KV 的定义者)。

  • 2012 年 GA(源自 2007 Dynamo 论文);AWS 核心服务之一 社区共识。
  • 行为稳定,API 十余年基本不动;向后兼容口碑好 社区共识。
  • 闭源云服务,能力演进由 AWS 排期 社区共识。

17 标杆用户 有

有(AWS 内部+海量外部用户)。

  • Snap 等公开大规模案例厂商口径厂商口径。
  • AWS 内部大量服务依赖 DynamoDB 社区共识。
  • Serverless 架构的首选 KV,初创公司采用极广 社区共识。

18 生态工具链 有

有(Streams 做 CDC;备份按需/PITR)。

  • 备份:按需备份+PITR(35 天)官方文档。
  • CDC:DynamoDB Streams(+Lambda 触发器)官方文档。
  • 迁移:AWS DMS;导出到 S3(Parquet)做分析 官方文档。

19 云托管与 Serverless 有

有(纯 Serverless,无自建版)。

  • DynamoDB 本身就是 Serverless:无服务器概念,按需/预置 官方文档。
  • 无自建版;本地开发用 DynamoDB Local(功能子集)官方文档。
  • AWS 绑定 社区共识。

20 数据接入与摄入 有

有(S3 导入、BatchWriteItem、zero-ETL)。

  • Import from S3(CSV/DynamoDB JSON/ION)是官方批量导入通道 官方文档。
  • BatchWriteItem + 并行是 SDK 侧常规做法,注意 WCU 与限流 社区共识。
  • DynamoDB zero-ETL 集成到 Redshift 是新通道 官方文档。

21 外部数据访问 部分支持

部分支持(自身无外部表;Athena 可联邦查 DynamoDB)。

  • DynamoDB 无外部表语义 官方文档。
  • Athena DynamoDB 连接器可做联邦查询 官方文档。
  • PartiQL 只能查本表,跨源要在上层做 社区共识。

22 CDC 与下游同步 有

有(DynamoDB Streams:Lambda/Kinesis)。

  • DynamoDB Streams 提供 24 小时变更日志,可接 Lambda/Kinesis Data Streams 官方文档。
  • Kinesis Data Streams for DynamoDB 支持更长保留与多消费者 官方文档。
  • 大写入量下 Stream 分片热点与 Lambda 并发是调优点 社区共识。

23 TTL 与数据生命周期管理 有

有(表级 TTL 属性,后台自动删不耗 WCU)。

  • 表上指定 TTL 属性(epoch 秒),过期项后台自动删,不消耗写容量 官方文档。
  • 删除延迟通常几小时内,不保证精确时刻 官方文档。
  • TTL 删除会产生 DynamoDB Streams 记录,可触发下游清理 官方文档。

24 在线 DDL 与 Schema 演进 不适用

不适用(schemaless,无 DDL 概念)。

  • 无 schema,属性随时增减,无 DDL 痛点 官方文档。
  • 最接近"在线 DDL"的是 GSI:在已有表上加全局二级索引是在线的——表在构建期间保持可用,DynamoDB 分"资源分配+回填"两阶段建索引并追踪并发写入;但每次 UpdateTable 只能建一个 GSI,且 LSI 建表后永远加不了 官方文档。
  • GSI 回填期间写放大,WCU 规划要留余量 社区共识。

25 多租户与资源隔离 部分支持

部分支持(表级吞吐隔离;无集群内多租户)。

  • 租户隔离靠多表/多账号,表级 WCU/按需计费天然隔离 官方文档。
  • 单表内多租户无资源限流,需应用层分区键设计 社区共识。

26 跨地域多活 有

有(Global Tables 多活写)。

  • Global Tables 多区多活写,最终一致,冲突 last-writer-wins 官方文档。
  • 冲突解决粗糙,不适合强一致多写场景 社区共识。
  • 跨区复制延迟通常 1 秒内 官方文档。

27 高可用架构与 RTO/RPO 有

有(托管多 AZ,SLA 99.99%)。

  • 数据多 AZ 同步复制,AZ 故障自动容错 官方文档。
  • Global Tables 另有 99.999% SLA 档 官方文档。
  • RTO/RPO 由平台兜底,用户无感知 社区共识。

28 行级安全与数据脱敏 部分支持

部分支持(IAM条件键做细粒度行级控制)。

  • DynamoDB 无引擎内 RLS,官方推荐用 IAM policy 的 condition keys(如 dynamodb:LeadingKeys)实现按分区键的行级隔离 官方文档
  • 列级控制靠 IAM 属性级权限(特定属性允许 / 拒绝) 官方文档
  • 脱敏无内置能力,靠应用层 社区共识
  • IAM 策略复杂度随租户数膨胀,是主要运维成本 社区实测

29 JSON 与半结构化能力 有

有(文档模型原生,Map/List 嵌套)。

  • Map/List 嵌套文档原生,DynamoDB JSON 与 SDK 互转 官方文档。
  • 单 item 400KB 上限,深嵌套文档注意条目大小 官方文档。

30 全文检索能力 无

无(查证为无;外挂 OpenSearch)。

  • 无全文检索(查证为无)官方文档。
  • 标准方案 DynamoDB Streams + OpenSearch,延迟与成本自负 官方文档。

31 存储效率与压缩 部分支持

部分支持(存储黑盒;按量计费无调优)。

  • 存储层为 AWS 黑盒自动管理,用户按存储量与读写容量付费,无压缩调优参数。官方文档
  • 官方未公开压缩算法与压缩比,存储效率不可观测、不可调。待验证
  • 单表设计等建模技巧可减少冗余,属应用层优化而非引擎压缩能力。社区共识

32 开源协议与厂商锁定风险 有

有(AWS 专属;API 绑定深)。

  • DynamoDB 是 AWS 专属托管 NoSQL 服务,无开源版本,完全绑定 AWS。官方文档
  • API 与数据建模(单表设计、GSI/LSI)深度绑定,迁出需重构访问模式。社区共识
  • 存在开源兼容实现(如测试级 LocalStack),但生产级替代缺失。社区共识

33 查询优化器与计划稳定性 不适用

不适用(无优化器:单表设计,查询固定)。

  • 无 CBO/计划概念,性能由单表建模与 GSI 设计决定 官方文档。
  • 查询模式固定,可预测性强,但复杂查询需应用层组装 社区共识。

34 参数调优与自治能力 有

有(Serverless 自治:零调参)。

  • 按需/预置+自动扩缩容,几乎零参数 官方文档。
  • 容量规划转为 WCU/RCU 成本规划 社区共识。

35 静默数据损坏防护 部分支持

部分支持(云厂商底层兜底,用户无可见校验开关)。

  • 存储层多副本同步复制,底层校验与自愈由 AWS 内部完成。官方文档
  • 用户侧无页校验开关、校验命令或损坏审计视图。社区共识
  • 连续备份/PITR 防的是逻辑损坏,静默位损坏不在用户可观测范围。官方文档

36 存储过程/触发器/过程语言 不适用

不适用(KV 无过程语言概念)。

  • 无存储过程/触发器概念(不适用)官方文档。
  • 流处理靠 Streams + Lambda 官方文档。

37 约束与数据完整性 无

无(无外键/CHECK;条件写入)。

  • 无外键、CHECK(查证为无),条件写入做乐观锁 官方文档。
  • 完整性应用层保证 社区共识。

38 分析 SQL 完备性 不适用

不适用(PartiQL 有限;分析靠导出)。

  • PartiQL 查询能力有限,无窗口函数(不适用分析 SQL)官方文档。
  • 分析靠导出 S3 + Athena/EMR 官方文档。

39 被遗忘权与数据擦除 部分支持

部分支持(DeleteItem即删;备份/PITR残留)。

  • DeleteItem 即时删除,无原生擦除证明 官方文档
  • 按需备份与 PITR(35 天)窗口内可恢复被删数据 官方文档
  • TTL 删除是异步的,删除时间不精确,合规场景不能依赖 TTL 做“准时擦除” 社区实测
  • 全局表多区域复制放大残留面 社区共识

40 数据血缘与目录集成 部分支持

部分支持(Glue Catalog 集成;无原生列级血缘)。

  • 可导出/爬网至 Glue Data Catalog 官方文档。
  • 无原生列级血缘 社区共识。

41 存算分离 vs 存算一体 有

有(全托管存算分离)。

  • 全托管,存储自动分区扩缩,计算无感 官方文档。
  • 用户不感知架构,弹性由服务保证 社区共识。

42 多模能力 无

无(纯 KV/文档,无多模)。

  • 仅 KV/文档模型,无向量/全文/图原生能力 官方文档。

43 FinOps 成本可观测性 有

有(按请求/容量计费,标签归因完整)。

  • 支持按请求与预置容量两种模式,账单细化到表级。官方文档
  • 成本分配标签 + Cost Explorer + AWS Budgets,归因与告警链路完整。官方文档

44 驱动与多语言生态 有

有(AWS SDK 各语言;JDBC 靠 Simba)。

  • AWS SDK(Java/Python/Node/Go)为一等接入 官方文档。
  • JDBC/ODBC 靠 Simba 第三方驱动 社区共识。

45 物化视图 不适用

不适用(KV 无物化视图概念)。

  • 无物化视图概念(不适用)官方文档。
  • 预聚合靠 Streams 物化到另一张表 社区共识。

46 支持跨云 无

无(AWS 绑定,无跨云)。

  • 仅 AWS,无其他云版本 官方文档。
  • 迁出靠导出到 S3 + 导入目标库,无跨云复制 社区共识。

47 热点数据更新能力 部分支持

部分支持(自适应容量自动吸热点,分区硬上限兜不住)。

  • 并发控制原语是无锁单 item 原子写:同一 item 并发写后写覆盖(LWW),无锁等待、无写冲突 abort;条件写(ConditionExpression)失败返回 ConditionalCheckFailedException,由应用决定是否重试,内核不重试;事务写 TransactWriteItems 遇冲突或条件失败整体取消,同样应用层重试。重试归属要分两层:节流抛出的 ProvisionedThroughputExceededException 由 AWS SDK 按指数退避自动重试(驱动层),业务语义冲突由应用层处理。衰减不来自锁,来自限流官方文档。
  • 衰减形态:流量按分区键哈希落分区,单分区硬上限 3000 RCU / 1000 WCU(物理节点能力),超限即节流——表总容量再富余也救不了单个热分区;热点 key 的延迟从个位数毫秒突变为节流重试风暴。单点瓶颈:单个分区键值 = 单个分区,有 LSI 的表还会限制分区拆分官方文档。
  • 内置缓解:自适应容量(adaptive capacity,2018 年引入)默认开启、免费——自动把冷分区的闲置吞吐调给热分区,并把持续高频访问的 item 隔离到独立分区(单 item 可吃满 3000 RCU / 1000 WCU);突发容量(burst capacity,保留最多 300 秒未用容量)吸收短时峰值。边界:自适应不能突破单分区硬上限,也救不了单调递增排序键造成的不可拆分热点——这是物理上限,不是配额;自适应容量对持续热 item 的隔离重平衡生效有滞后(社区口径:约 5–30 分钟才逐步生效),突发热点在生效前仍先被节流,burst capacity 只能吸收 300 秒以内的短时峰值官方文档。
  • 应用层模式与代价:写分片——热逻辑 key 加随机后缀拆成 N 个物理分区键(如 EVENT#123#00…#15),读时聚合(代价:读放大、聚合逻辑进应用层);读热点前置 DAX 或应用缓存(代价:DAX 另计费、限 VPC、写穿复杂度);不可预测峰值用 on-demand 模式(代价:单价高于预置容量)。建模铁律:分区键选高基数、忌时间戳/状态等低基数键,这是官方分区键设计指南的首要规则——热点首先是建模问题官方文档。

招牌能力

  1. Serverless 零运维:无实例、无补丁、无版本升级 真本事:没有"主从""分片运维""版本升级"这些概念,吞吐与存储自动扩展;这是它相对一切自建/半托管库最硬的差异。 边缘真相:运维工作没有消失,只是换了形态——DBA 变成了"容量建模师 + FinOps":on-demand 还是 provisioned、GSI 投影、item 大小取整,每一项都直接连着账单。团队里没人懂 RCU/WCU 账,"零运维"会变成"零预警的账单惊魂"。
  2. 规模无关的单毫秒延迟 真本事:分区哈希架构,GetItem/Query 延迟与表是 1GB 还是 100TB 无关(官方口径个位数毫秒);这是关系型库"数据量涨→索引深→变慢"曲线不存在的地方。 边缘真相:只对"按键访问"成立。Scan 全表、跨分区聚合、GSI 回表是线性成本;强一致读 2x RCU;DAX 能把读压到微秒但只缓存最终一致读,ConsistentRead=True 直接绕过 DAX(配了 DAX 又全走强一致 = 白花钱)。
  3. Global Tables:真正的多 Region 多写 真本事:每个 Region 可读可写,本地延迟写全球;Region 级 DR 与全球化读写的天然方案。 边缘真相:见深水区六——MREC 的 last-writer-wins 会静默丢更新;MRSC 要 3 Region 固定拓扑、无事务、无 TTL,写延迟付跨 Region quorum 税。多活的是"接入",不是"一致性免费"。
  4. Streams + TTL + PITR 开箱即用 真本事:CDC(Streams→Lambda)、自动过期(TTL 零存储成本)、35 天秒级 PITR 全是第一方开关,不用攒 Debezium/备份脚本。 边缘真相:Streams 只保留 24 小时、每 shard 最多 2 个消费者,高吞吐 CDC 要换 Kinesis Data Streams for DynamoDB;TTL 删除是"48 小时内尽力",不是准时过期(到期必须不可见的场景应用层还要再过滤);PITR 恢复只能建新表。
  5. 向量检索(2026-08 GA):KV 库里的 ANN 真本事:每表最多 5 个向量索引、4096 维、TopK 100,RAG 场景"元数据过滤 + 向量召回"一库搞定。 边缘真相:base 表超 600GB 需 allowlist(待验证细节);别把它当专用向量库——大规模 ANN 性能与生态(LangChain 集成深度)待实测验证。这是"顺手做向量",不是"向量数据库"。

深水区

深水区一(存储/性能):分区是物理上限,热 key 是设计税(domain:存储引擎)

  • 机制:按分区键哈希分布到内部分区;每分区硬上限 3,000 RCU / 1,000 WCU官方文档,provisioned 和 on-demand 都一样;burst capacity 借 300 秒未用额度扛短峰,adaptive capacity 把闲置额度挪给热分区(甚至把热 key 隔离到独立分区)。
  • 推到边缘:adaptive 再能借也借不过分区天花板——单 key 的写入超过 1,000 WCU/s 就是死刑,分区自动分裂只看吞吐不看 key 基数,一个 key 永远分不到两个分区。表级 CloudWatch 显示"只用了 43% 容量"但请求被 ProvisionedThroughputExceededException 打回,是 DynamoDB 最经典的故障现场。唯一解是写分片(user#0…#N 后缀打散),代价是读变 scatter-gather、应用层合并排序。
  • 选型含义:key 设计是 DynamoDB 的第一生产力;POC 必须按真实 key 分布压测,均匀压测是自欺欺人;上线 Contributor Insights,把"热 key 定位"写进 on-call 手册。
  • 来源:官方文档(burst/adaptive capacity);dev.to 社区解析(2026-08);社区技能文档(2026-09)

深水区二(成本):RCU/WCU 的取整税与"方便税"(domain:成本)

  • 机制:写按 1KB 向上取整计 WCU,读按 4KB 向上取整计 RCU;强一致读 2x;事务写 2x;条件表达式失败的写照样收费;on-demand 单价约为满利用 provisioned 的数倍(社区口径 5–7x)。
  • 推到边缘:1.1KB 的 item 按 2KB 收费——JSON 嵌套、时间戳、元数据让"刚好超一点"成为常态,高频写入下隐形附加成本显著(第三方博客测算口径);"先 on-demand 上线,以后再切 provisioned"的团队,流量起来后账单翻数倍才想起切(第三方博客案例,厂商无关);Scan 做 admin 看板:大表全表扫一次费用可观(第三方口径),每刷一次看板烧一次。
  • 选型含义:item 设计时把"每 KB 都是钱"刻进 schema 评审;条件写失败率要监控(失败=烧钱无产出);on-demand 只给"不可预测"负载,流量可预测且有稳定基线就该切 provisioned+auto-scaling(社区经验);Scan 永远走 S3 导出 + Athena。
  • 来源:hackernoon 第三方成本分析;awslabs startup-advisor 技能文档(2026-09);社区共识

深水区三(成本/一致性):GSI 是"第二张账单",且只给最终一致(domain:索引)

  • 机制:每个 GSI 独立计费——写入含 GSI key 属性的 item,base 表和 GSI 各收一次 WCU(投影 ALL ≈ 写成本翻倍);GSI 有独立吞吐配额、独立节流;GSI 读永远最终一致;LSI 只能建表时建、共享表吞吐、单分区键值 10GB 上限。
  • 推到边缘:更新 GSI 的 key 属性 = 删旧索引项 + 写新索引项,一次更新收两次 GSI 写;"随手加个索引查 email"的 PR 让月账单显著上升、写延迟 +40%(Medium 社区案例 2025-10);5 个全投影 GSI = 写账单 ×6;GSI 背压还会拖慢 base 表写入(写入要等索引写)。
  • 选型含义:GSI 是 schema 设计的一部分,不是运维期的"加索引"按钮;投影能少则少(KEYS_ONLY/INCLUDE),稀疏索引(只给部分 item 建 GSI key)是省钱的标准动作;要强一致的第二访问模式只能用 LSI——但 LSI 必须在建表时想好。
  • 来源:官方文档;Medium 社区案例(2025-10);社区技能文档(2026-09)

深水区四(复制/CDC):Streams 的 24 小时与 2 消费者天花板(domain:复制与 CDC)

  • 机制:DynamoDB Streams 按 shard 有序推送变更,保留 24 小时;每 shard 最多 2 个消费者;通常接 Lambda。
  • 推到边缘:消费者挂了超过 24 小时没追上——数据永久丢失,没有"从头再消费"的后悔药;第 3 个消费者(审计+缓存失效+搜素同步各要一个)直接被拒,只能换 Kinesis Data Streams for DynamoDB(保留期可达 1 年、5+ 消费者);每秒 1 万次写入 = 每秒 1 万次 Lambda 调用,Lambda 并发配额和调用费一起爆炸;单个坏 record 会卡住整个 shard 的重试。
  • 选型含义:Streams 是"触发器",不是"消息队列";超过 2 个下游或需要回放,先上 Kinesis;Lambda 消费端必须做幂等 + 死信队列,坏 record 不能卡 shard。
  • 来源:官方文档;awslabs startup-advisor(2026-09);社区技能文档(2026-09)

深水区五(建模):单表设计——把 join 从数据库赶到人脑(domain:建模/迁移)

  • 机制:DynamoDB 没有 join,"访问模式先行":所有查询预先设计为分区键+排序键(+GSI),多实体塞一张表、用 key 前缀区分(USER#/ORDER#),一次 Query 取回聚合。
  • 推到边缘:这是 DynamoDB 学习曲线最陡的一段——关系型里"加个 join 就能查"的需求,在这里=加 GSI(加钱)或重做 key 设计(停机迁移);item 拆分也有讲究:高频变的小属性和静态大属性放同一 item,每次更新按整个 item 大小收 WCU,拆成两个 item 能把计数器更新从 2 WCU 降到 1 WCU;新增访问模式 = 新 GSI = 新账单,老表的"查询灵活性"是事先买好的,不是免费的。
  • 选型含义:团队里必须有人能画出"访问模式→key 设计"矩阵,否则三个月后就是"加表还是加 GSI"的泥潭;创业公司建议"先用 PG 跑通业务,热路径稳定后再迁 DynamoDB"(awslabs 官方 startup 建议),别在需求天天变的阶段玩单表设计。
  • 来源:社区技能文档(2026-09);awslabs startup-advisor(2026-09);社区共识

深水区六(复制与一致性):Global Tables——LWW 静默丢 vs MRSC 的三 Region 笼子(domain:复制与容灾)

  • 机制:MREC(默认):异步复制(通常 1–2 秒,官方口径),并发写同一 item 用 last-writer-wins 收敛;MRSC(新):同步 quorum 写,冲突写直接抛 ReplicatedWriteConflictException 让应用重试。
  • 推到边缘:MREC 下两个 Region 同时扣库存,LWW 静默丢掉一笔——没有冲突告警,没有版本向量,"最终一致"一致的是"丢了哪一笔不告诉你";MRSC 把笼子建得很死:固定 3 Region(含 1 个 witness)拓扑、Region 集合不能跨大区组、事务/TTL 不支持,写延迟 = 跨 Region quorum RTT,账单 = 每 Region 一份 rWCU 写费。以及"多活接入"不等于"用户路由"——DynamoDB 不帮你做流量调度,Route 53/应用层自己来。
  • 选型含义:库存/余额/计数器三类数据,MREC 下必须"写分区 pin Region"或条件写,天然多写 LWW 就是丢数据;MRSC 只给"丢不起但写得少"的核心数据,且先算好延迟和账单;DR 演练要测"Region 挂了流量怎么切",而不是"数据有没有过去"。
  • 来源:官方文档(Global Tables 原理页);aws.amazon.com Global Tables FAQ;社区技能文档(2026-09)

客户经验

本区内容主要基于厂商口径与媒体转述,独立社区验证不足,引用时请打折。

生态 Serverless 零运维:流量不可预测时"先跑起来"的最短路径

一句话
零节点、零容量规划,按请求自动扩缩容;on-demand 模式下流量为零时账单为零,是"想法→上线"摩擦最小的托管 KV 库。
窄场景
新应用/流量尖刺型业务/小团队(无 DBA):workload 模式尚未稳定、峰值不可预测、团队不想在容量规划上花一分钟。AWS 官方 startup 指南建议"用 PostgreSQL/Aurora 等模式稳定后,再把热路径迁到 DynamoDB"——说明舒适区是"模式未定、要快"。
机制
存储与请求路由层由 AWS 全托管,分区按请求量自动分裂;on-demand 模式即时支撑约 2 倍于历史峰值的流量(30 分钟内超过 2 倍跳变仍可能被 throttle,官方实践指南原话)。对比自建:你要自己算节点数、管 compaction。DynamoDB 把这部分全部外包,换来的代价是计费。
生产验证
United Airlines:re:Invent 2024 上 AWS 披露其用 DynamoDB Global Tables 做航班选座系统,看中"极致扩展 + active-active 多 Region 高可用 + 个位数毫秒延迟"(https://aws.amazon.com/blogs/database/amazon-dynamodb-reinvent-2024-recap/);Disney+:1.49 亿用户、60 国,用 Global Tables 支撑 watchlist/播放书签的低延迟访问(https://aws.amazon.com/blogs/database/amazon-dynamodb-use-cases-for-media-and-entertainment-customers/)。
竞品差距
Cassandra/ScyllaDB——同宽列模型但自运维,运维税高;MongoDB/DocumentDB——文档模型更灵活但极端规模下延迟保证弱。
证据等级
厂商口径(具名客户引用,未独立复现延迟数字)。诚实备注:这是本档案证据最弱的正面招牌——具名大厂细节多经 AWS 官方博客转述。awslabs 指南直言"on-demand 只适合早期/尖刺流量,流量可预测后必须切 provisioned,否则贵 5–7 倍"。
最后核验
2026-10-01

生态 Global Tables:一次 API 调用的开箱即用多活

一句话
加一个 replica 就是一次 API 调用,跨 Region 异步复制、last-writer-wins 冲突解决,应用无感知拿到 active-active 多写。
窄场景
全球化 C 端业务(社交动态、视频 watchlist、航班选座):多 Region 就近读写、Region 级容灾 RPO~秒级、团队不想自建跨 Region 复制拓扑。
机制
自建多活要在应用层解决复制、冲突、脑裂;Global Tables 把复制做进存储层,写任意 Region 自动异步同步到其他 Region。代价是最终一致 + last-writer-wins(冲突时不报错、直接覆盖),这对"选座""watchlist"可接受,对"扣库存"不可接受——机制决定了它的适用边界。
生产验证
United Airlines 航班选座(active-active 多 Region,re:Invent 2024,URL 同上一张卡片);Warner Bros. Discovery 的 Max 用 Global Tables 做跨 Region 用户 watchlist 多活写入(https://aws.amazon.com/blogs/database/amazon-dynamodb-use-cases-for-media-and-entertainment-customers/)。
竞品差距
Aurora Global Database——物理复制、写只有一个主 Region(active-passive),延迟更低但不是多写;Spanner——TrueTime 外部一致性多活,机制更强但成本与复杂度高一个量级;CockroachDB/YugabyteDB——多活但自运维/专有云。
证据等级
厂商口径(具名客户引用,未独立复现)。诚实备注:AWS 强调"multi-active";用户必须自己想明白 last-writer-wins 在自己业务里丢不丢得起——这是文档里有、营销页上不显眼的一行。
最后核验
2026-10-01

避坑 On-demand 的"方便税":长大后不搬家就交 5–7 倍溢价

一句话
on-demand 按请求计费省掉了容量规划,但单价约为 provisioned 的 5–7 倍;叠加按 1KB/4KB 向上取整的计费粒度、每个 GSI 对每次写入的写放大,账单会在流量起来后悄悄变成"能买一台小集群"的规模。
窄场景
流量可预测且持续——此时 on-demand 从"最优解"变成"最贵解";awslabs 的 startup 指南给的切换触发线是"DynamoDB 月账单超 $100 且流量可预测"。
机制
三层税——① on-demand 单价税(方便税,约 5–7x);② 粒度税:写按 1KB chunk 向上取整,真实 JSON 载荷几乎都踩线;③ GSI 写放大税:每个 GSI 在每次基表写入时都要消费写容量,5 个全投影 GSI ≈ 5 倍基表写成本。
生产验证
CodexLab 生产复盘《DynamoDB On-Demand Pricing: The $9K Surprise》:RDS $450/月 → 预估 $120/月 → 第三个月单周末 $9,247.83(https://medium.com/@codexlab/dynamodb-on-demand-pricing-the-9k-surprise-58b10b70ea61);Rob Abbott《The $800/Month Mistake》:一个 GSI 的属性投影配置不当,每月多 $800 且写延迟增加 40%(https://medium.com/@DocTaco/the-800-month-mistake-that-taught-me-everything-about-dynamodb-indexes-4fd97bb94f40);Segment(InformationWeek 报道):排查热点 key + 精简预置吞吐量,把吞吐需求砍掉 75%,年省 $300,000(https://www.informationweek.com/data-management/inscrutable-amazon-bill-behind-it-a-1-million-savings)。HackerNoon 的《The Hidden Insanity of DynamoDB Pricing》系统梳理了粒度税与 on-demand 溢价(https://hackernoon.com/the-hidden-insanity-of-dynamodb-pricing)。注:该文带 ScyllaDB 倾向性,其"换 ScyllaDB 省 XX%"结论按厂商口径处理。
竞品差距
Cassandra/ScyllaDB 自建——成本是固定基础设施,流量越大越划算(光谱另一端);provisioned 模式 + auto scaling——同一产品内省 30–60%。
证据等级
社区实践(多个独立账单复盘指向同一计费机制)。诚实备注:这是 DynamoDB 第一张卡片的镜像代价——AWS 首页营销是"pay only for what you use";用户侧的真实翻译是"你用的每个字节都要按 AWS 定义的 chunk 交税,且方便是有标价的"。
最后核验
2026-10-01

避坑 单表设计的心智税:"access pattern 先行"既是超能力也是枷锁

一句话
DynamoDB 没有 join,关系要靠"PK/SK 复合键 + 前缀 + 反范式 + GSI"手工展开;单表设计把"一次查询取齐多个实体"做到极致,但要求你写第一行代码前就枚举完所有访问模式,新增访问模式往往意味着加 GSI 或数据迁移。
窄场景
访问模式固定且可枚举的 OLTP(如订单、会话、设备影子);访问模式演化的业务用它会持续交"加索引税"。
机制
关系型是"先建模实体、查询时再想",DynamoDB 是"先枚举查询、再倒推键设计"。GSI 不是免费的二级索引:它是带独立计费的全量投影副本。此外 400KB 单 item 上限、TransactWriteItems 限 100 条/4MB 且仅单 Region,都是把关系型直觉搬过来时会撞的墙。
生产验证
Rafal Wilinski(Dynobase 创始人):最痛的一条是"GSI 是后加的,导致已有数据要回填 GSI 键"——访问模式漏枚举的代价是真实的数据迁移(https://www.rwilinski.me/blog/dynamodb-single-table-design-lessons/);Seddle 团队 2026 年复盘:代价是"GSI 必须在建模阶段设计、属性名要缩短(按字节收存储费)、读热点要前置缓存"(https://medium.com/@dustin_44710/building-a-scalable-data-layer-with-dynamodb-lessons-from-seddle-7560a346754e)。
竞品差距
MongoDB/DocumentDB——文档模型 + 灵活查询,访问模式演化成本低得多;PostgreSQL/MySQL——join 随便加,范式建模心智零税。
证据等级
社区实践。诚实备注:AWS 官方把单表设计列为"recommended default";awslabs 的 startup 指南却说"pre-PMF 阶段别过度工程化,一个实体一张表就行"。厂商推"一步到位",老手推"先跑起来再收敛"。
最后核验
2026-10-01

用户最买账的 5 点

  1. 真·零运维 serverless 为什么是真的:无实例、无补丁、无版本升级、无"半夜扩容",14 年生产验证;这是"不想养 DBA 团队"的团队最实在的解脱。 边缘与限度:运维复杂度转移到了容量建模和 FinOps;行为变更(如新功能默认行为)不由你控制发布时间;救火手段比自建少(没有"连上去改参数"那一招)。 来源:官方文档;社区共识。观察版本:serverless 持续演进
  2. 规模无关的个位数毫秒延迟 为什么是真的:分区哈希架构,GetItem/Query 延迟不随表大小增长;读多、key 明确的场景(session、购物车、设备影子)这是降维打击。 边缘与限度:只对按键访问成立;Scan/聚合是线性成本;强一致 2x RCU;DAX 只加速最终一致读。 来源:官方文档(厂商口径延迟);社区实测。观察版本:全版本
  3. on-demand 按量付费,冷启动零成本 为什么是真的:没流量不花钱(存储除外),新业务/潮汐负载/开发环境开箱即用;不用做容量规划就能上线。 边缘与限度:稳态负载下是 provisioned 的数倍(社区口径 5–7x);"先 on-demand 以后再说"的团队是账单惊魂的重灾区;流量可预测且有稳定基线就该切 provisioned(社区经验)。 来源:社区技能文档(2026-09);第三方成本分析。观察版本:全版本
  4. Global Tables 全球多活 为什么是真的:多 Region 同时写、本地延迟,全球化业务(游戏、SaaS)不用自己搭跨国复制;99.999% SLA厂商口径。 边缘与限度:见深水区六——LWW 静默丢、MRSC 笼子、复制写按 Region 收费;流量路由自己做。 来源:官方文档;社区共识。观察版本:MREC/MRSC 双模式现行
  5. AWS 生态集成密度 为什么是真的:Streams→Lambda 事件驱动、TTL 自动过期、PITR、zero-ETL 到 S3/Redshift、IAM 细粒度权限,一套控制台配齐;serverless 架构里它是默认的"状态层"。 边缘与限度:每个集成都有天花板(Streams 24h/2 消费者、TTL 非准时、恢复只能新表);生态集成的另一面是 AWS 锁定——迁出=重写数据访问层。 来源:官方文档;社区共识。观察版本:全版本

吐槽清单

分类吐槽影响版本状态
性能坑热分区:单 key 超 1,000 WCU/s / 3,000 RCU 即节流,表级容量再富余也没用;adaptive capacity 借不过物理上限全版本open(by design,靠 key 设计规避)
性能坑分区自动分裂不看 key 基数,单 key 永远分不到两个分区;CloudWatch 表级聚合藏住热分区全版本open(Contributor Insights 定位)
成本坑on-demand 稳态溢价 5–7x(社区口径),"先上车后补票"团队账单惊魂全版本open(切 provisioned 规避)
成本坑WCU/RCU 向上取整税:1.1KB 按 2KB 收费;条件写失败照样收费;事务写 2x全版本open(by design)
成本坑GSI 写放大:每个 GSI 独立收 WCU,投影 ALL ≈ 写成本翻倍;5 个 GSI = 写账单 ×6全版本open(稀疏索引/小投影规避)
成本坑Scan 做看板/分析:大表全表扫一次费用可观(第三方口径),生产表 Scan 是烧钱全版本open(走 S3 导出 + Athena)
运维坑Streams 只保留 24h、每 shard 最多 2 消费者;消费者挂超 24h 数据永久丢失全版本open(大吞吐换 Kinesis Data Streams)
运维坑TTL 删除是 48 小时内尽力而为,不是准时过期;到期必须不可见要应用层再过滤全版本open(by design)
运维坑PITR/备份恢复只能生成新表,不支持原地回滚;"回滚" = 切流量到新表全版本open(by design)
一致性坑Global Tables MREC 的 last-writer-wins 静默丢并发更新,无告警无版本向量全版本open(by design;MRSC 可解但代价高)
一致性坑MRSC:固定 3 Region 拓扑、不支持事务/TTL、写付跨 Region quorum 延迟税现行open(by design)
兼容坑无 join、无 ad-hoc 查询;新增访问模式 = 加 GSI(加钱)或重做 key(迁移)全版本open(by design)
兼容坑PartiQL 是 SQL 方言子集,复杂查询/分析指望不上全版本open
兼容坑单 item 400KB 上限;大对象要拆 item 或放 S3全版本open
生态坑闭源、无自建发行版,AWS 锁定;DynamoDB Local 与生产行为有差异社区共识,本地测完上生产仍可能踩坑全版本open
生态坑DAX 只缓存最终一致读,全走强一致 = 白花钱;DAX 集群本身另计费全版本open

判决

  • 一句话定位:AWS 上"按键访问、读多、规模不确定"的 serverless 状态层最优解;但它是为"访问模式"设计的,不是为"数据模型"设计的——建模错了,账单和重构会教你做人。
  • 适合谁:
    • AWS 上的 serverless/事件驱动架构,需要单毫秒 KV/文档存储(session、购物车、用户画像、设备影子、订单头)
    • 访问模式清晰且稳定、读多写少、key 分布均匀的高并发 OLTP
    • 全球化业务需要多 Region 低延迟读写(MREC + 写分区 pin Region)
    • 流量不可预测的新业务、潮汐负载、开发测试环境(on-demand)
    • 需要开箱 CDC(Streams→Lambda)做事件驱动的团队
  • 不适合谁:
    • 查询模式多变、需要 ad-hoc 查询/聚合/报表(这是 OLAP 或搜索引擎的活)
    • 跨多 item 的复杂事务是常态(100 项/4MB 上限 + 2x 成本是紧箍咒)
    • 库存/余额/计数器类"丢一笔就是事故"的数据,又想多 Region 同时写(LWW 静默丢)
    • 重度关系建模、join 是刚需的业务
    • 多云/信创/要求开源自主可控的组织;预算敏感且不愿做 FinOps 的小团队
  • 迁移成本:
    • MySQL → 高:关系建模→访问模式建模重写,join 拆应用层或 GSI,事务语义重做
    • PostgreSQL → 高:同上;JSONB 用户注意 DynamoDB 文档模型更弱(无 GIN 这类索引)
    • Oracle → 高:无 Oracle 兼容路线,不建议作为"去 O"目标
    • Redis/Cassandra → 中低:KV 心智接近,注意 DynamoDB 无 Lua 脚本/复杂数据结构,Cassandra 宽行要重做 key 设计

来源与待验证清单

  • 架构与机制:AWS 官方文档(Global Tables 原理、burst/adaptive capacity、Streams、PITR、加密);aws.amazon.com Global Tables FAQ(MREC/MRSC 口径)
  • 计费模型:on-demand 按读写请求单元计费,provisioned 按预置容量单位/小时计费,存储按 GB-月、PITR/备份/Global Tables 复制写/Streams 读取/DAX 另计(AWS 定价页口径,2026-08 核验;具体金额以 AWS 账单为准,此处不引用绝对标价)
  • 深水区与吐槽:dev.to adaptive capacity 解析(2026-08);hackernoon 成本分析;Medium Rob Abbott GSI 案例(2025-10);awslabs startup-advisor 技能文档(2026-09);GitHub 社区技能文档多份(2026-09)
  • 待验证项:向量检索 600GB allowlist 细节;DynamoDB Local 与生产行为差异的系统清单;中国区(宁夏/北京)Global Tables MRSC 可用状态
  • 下次评审:跟踪向量检索 GA 后的生产案例与性能口径;跟踪 MRSC 的 Region 集合扩展与功能限制松绑;跟踪 on-demand 定价调整