AWS DynamoDB 无服务器数据库实战:从0搭建高并发NoSQL应用(2026最新教程)

📅 · AWS 国际版实战教程 - ChengziCloud

一句话结论

Meta Description: AWS DynamoDB 无服务器数据库完整教程:分区键/排序键/容量模式核心概念、按需vs预置费用对比表、控制台+CLI+boto3三套实操、避免账单爆炸的5个省钱设置、常见问题FAQ,2026最新版。

本文要点
  • 前言
  • DynamoDB 是什么:一张表看懂无服务器数据库
  • 容量模式:按需 vs 预置,选错账单差 3 倍
  • 价格对比表:DynamoDB vs RDS MySQL vs Aurora
  • 实操一:控制台创建 DynamoDB 表(5 分钟)
  • 实操二:AWS CLI 建表与读写
  • 实操三:Python(boto3)接入你的应用
  • 避免账单爆炸的 5 个设置(重要)

Meta Description: AWS DynamoDB 无服务器数据库完整教程:分区键/排序键/容量模式核心概念、按需vs预置费用对比表、控制台+CLI+boto3三套实操、避免账单爆炸的5个省钱设置、常见问题FAQ,2026最新版。

关键词:AWS DynamoDB、DynamoDB教程、无服务器数据库、NoSQL数据库、DynamoDB价格、RCU WCU、DynamoDB vs RDS、AWS免费套餐

前言

答案是:高并发键值/文档型数据(用户会话、购物车、订单流水、IoT设备数据)选 DynamoDB,它把"扩容"这件事完全交给 AWS,按实际读写量计费,新手用免费套餐可以永久 0 成本起步;需要多表 JOIN、复杂报表查询的关系型场景则仍选 RDS。 决策口诀:"KV 读写选 Dynamo,复杂查询选 RDS,核心交易选 Aurora"。

DynamoDB 是 AWS 的旗舰无服务器数据库:不用选实例规格、不用管理磁盘、不用做主从复制,数据自动存 3 份(跨多个可用区),读写能力随流量自动伸缩。很多开发者被"NoSQL 门槛高"劝退,其实 DynamoDB 的核心概念只有三个:分区键、排序键、容量模式。本文用一张概念表、两张价格表、三套实操(控制台/CLI/Python),30 分钟带你从 0 跑通一个高并发订单应用的数据层。

一、DynamoDB 是什么:一张表看懂无服务器数据库

DynamoDB 与自建数据库、RDS 的本质区别:你不再管理任何服务器。它把数据库抽象成"表 + 吞吐量"两个概念,其余全部托管:

能力DynamoDB 的处理方式自建 MySQL/Redis 的处理方式
扩容自动伸缩,无需停机手动加机器、改配置、重启
高可用同区域自动 3 副本,跨区域用全局表自己搭主从 + 故障切换脚本
备份一键连续备份(PITR),可秒级恢复自己写 cron + mysqldump
运维零运维,AWS 全托管需要专职 DBA
计费按读写请求次数 + 存储量按实例规格 + 磁盘固定付费

它的核心概念就三个,先记牢:

  1. 分区键(Partition Key):决定数据存在哪,查询时最常用,如 userId、orderId。设计好坏直接决定性能上限。
  2. 排序键(Sort Key):可选。同一分区内再按第二字段排序,如"某个用户的所有订单按时间倒序"。
  3. 容量模式(Capacity Mode):按需(Pay per request)或预置(Provisioned)。这是账单差异最大的一个选项,下一节专门讲。

二、容量模式:按需 vs 预置,选错账单差 3 倍

DynamoDB 的读写能力用 RCU(读取容量单位)/ WCU(写入容量单位) 衡量:1 个 RCU = 每秒 1 次 4KB 强一致读(或 2 次最终一致读),1 个 WCU = 每秒 1 次 1KB 写入。

对比维度按需模式(On-Demand)预置模式(Provisioned)
计费方式按实际请求次数,无预留按预留的 RCU/WCU × 小时
自动扩展原生无限扩展,零配置需手动设容量 + 开启 Auto Scaling
峰值流量突然 100 倍流量也扛得住超出预留容量会被限流(Throttling)
适合场景新项目、流量波动大、开发测试流量稳定可预测的生产环境
成本特点利用率低于 30% 时更省利用率高于 30% 时更省(可省 2~3 倍)

选择口诀:不确定流量就按需,跑稳定了再切预置。 AWS 支持随时一键切换,切换过程不中断服务。预置模式务必开启 Auto Scaling,并给表设置 CloudWatch 告警——否则流量一涨就被限流,页面直接 5xx(可用 AWS CloudWatch 监控告警教程 里的方法 10 分钟配好)。

三、价格对比表:DynamoDB vs RDS MySQL vs Aurora

对比维度DynamoDBRDS MySQLAurora
数据库类型NoSQL(键值/文档)关系型关系型(MySQL 兼容)
计费单位RCU/WCU + 存储实例规格 + 存储实例 + IO + 存储
写入成本$1.25 / 百万 WCU含在实例费中含在实例费 + IO 中
读取成本$0.25 / 百万 RCU含在实例费中含在实例费 + IO 中
存储价格$0.25 / GB·月(前 25GB 免费)$0.115 / GB·月(GP3)$0.10 / GB·月
起步规格无实例概念,按请求量db.t3.micro 约 $0.016/时db.t3.medium 约 $0.041/时
自动扩容原生支持(按需模式)需手动升配Aurora Serverless v2
免费额度25GB + 25 RCU + 25 WCU,永久免费12 个月无独立免费额度
适合场景会话/购物车/订单流/IoT/游戏电商后台/ERP/财务系统核心交易/全球多活

按美元单价换算:以每月 100 万次写入 + 1000 万次读取为例,DynamoDB 按需约 $1.25 + $2.5 = $3.75;同样的流量用 RDS db.t3.micro 实例费约 $11.7/月(24×30×0.016)——流量小的时候 DynamoDB 反而更便宜,且起步是 0 成本。这也是"无服务器数据库"特别适合个人项目和创业团队的原因。

四、实操一:控制台创建 DynamoDB 表(5 分钟)

  1. 登录 AWS 控制台,搜索 DynamoDB 进入服务页面;
  2. 点击 Create table(创建表);
  3. Table name 填 orders;Partition key 填 orderId,类型选 String;Sort key 填 createdAt,类型选 String;
  4. Table settings 选择 On-demand(按需模式,新手默认选这个,避免预置容量费用);
  5. 其余保持默认,点击 Create table,几秒钟后表状态变为 Active 即创建成功。

创建后进入 Explore items(浏览项目)页面,点 Create item 直接插入一条测试数据:orderId 填 1001,createdAt 填 2026-08-13T10:00:00,再手动加一个属性 amount(数字类型)填 99.9,保存后数据立刻可查——整个过程不到 1 分钟。

五、实操二:AWS CLI 建表与读写

本地安装 AWS CLI 并执行 aws configure 配置好密钥后,命令行与操作台完全等价:


// 1. 创建表(按需模式)
aws dynamodb create-table \
    --table-name orders \
    --attribute-definitions \
        AttributeName=orderId,AttributeType=S \
        AttributeName=createdAt,AttributeType=S \
    --key-schema \
        AttributeName=orderId,KeyType=HASH \
        AttributeName=createdAt,KeyType=RANGE \
    --billing-mode PAY_PER_REQUEST

// 2. 写入一条数据
aws dynamodb put-item \
    --table-name orders \
    --item '{"orderId": {"S": "1002"}, "createdAt": {"S": "2026-08-13T11:00:00"}, "amount": {"N": "199.9"}}'

// 3. 按分区键+排序键精确读取
aws dynamodb get-item \
    --table-name orders \
    --key '{"orderId": {"S": "1002"}, "createdAt": {"S": "2026-08-13T11:00:00"}}'

// 4. 查询某个订单号下的全部记录
aws dynamodb query \
    --table-name orders \
    --key-condition-expression "orderId = :oid" \
    --expression-attribute-values '{":oid": {"S": "1002"}}'

注意两点:get-item 必须带上完整主键(分区键 + 排序键);想按其他字段查询,必须建二级索引(GSI)。GSI 按需模式下随意创建,同样按量计费。

六、实操三:Python(boto3)接入你的应用

后端接入用官方 SDK boto3,几行代码即可跑通读写:


import boto3

dynamodb = boto3.resource('dynamodb', region_name='ap-southeast-1')
table = dynamodb.Table('orders')

table.put_item(Item={
    'orderId': '1003',
    'createdAt': '2026-08-13T12:00:00',
    'amount': 299.9,
    'status': 'PAID'
})

resp = table.get_item(Key={'orderId': '1003', 'createdAt': '2026-08-13T12:00:00'})
print(resp['Item'])

resp = table.query(
    KeyConditionExpression='orderId = :oid',
    ExpressionAttributeValues={':oid': '1003'}
)
for item in resp['Items']:
    print(item['amount'], item['status'])

这段代码就是电商订单服务的雏形。配合 AWS Lambda 无服务器 API 实战教程,把 put_item 放进 Lambda 函数,你就拥有一个自动扩容、按量付费、几乎零运维的订单接口——高并发场景下每秒几万次写入也不用手动加机器。

七、避免账单爆炸的 5 个设置(重要)

  1. 容量模式选对:新表默认按需;月读写利用率稳定超过 30% 后切预置 + Auto Scaling,能省 2~3 倍(详见第二节)。
  2. TTL 自动过期:会话、验证码、日志类数据开启 TTL(Time to Live),指定过期字段,到期自动删除且不收费,还能持续省存储费。控制台 Table settings → TTL → 指定属性即可。
  3. 给表建 CloudWatch 告警:监控 ConsumedReadCapacityUnits / ConsumedWriteCapacityUnits,月消耗接近免费额度时提醒你;同时监控 ThrottledRequests,防止预置模式被限流。
  4. 备份按需开:默认关闭备份;只有核心业务表开启 PITR(连续备份,约 $0.20/GB·月),普通表用偶尔的手动按需备份(约 $0.10/GB·次),别全开。
  5. 分区键均匀设计:不要用"自增 ID"做分区键(会打满一个分区导致热分区、限流);用 userId、随机后缀等分散值,读写才能吃满预留容量。

再补一条免费额度提醒:DynamoDB 的免费套餐(25GB 存储 + 25 RCU + 25 WCU)是永久有效的,和 EC2 的 12 个月免费不同——个人项目只要流量不大,可以一直 0 成本跑(注册账号避坑见 AWS 免费套餐注册教程)。

八、DynamoDB 与 RDS 场景对照:到底怎么选

你的需求推荐原因
用户会话、购物车、验证码DynamoDBKV 读写,TTL 自动清理
订单流水、IoT 设备数据DynamoDB高并发写入,自动扩容
排行榜、消息流(Feed)DynamoDB排序键天然支持时间倒序
电商后台、ERP、财务RDS MySQL多表 JOIN、事务、报表
JSON 灵活查询、GIS 分析RDS PostgreSQL复杂查询能力强
核心交易 + 全球多活Aurora性能与高可用天花板

完整关系型选型对比见 AWS RDS 云数据库选型教程。记住:不是把 MySQL 换掉就高级,而是"关系型需求用关系型,KV 需求用 DynamoDB",混搭才是最优解。

九、常见问题 FAQ

Q: DynamoDB 免费吗? A: 免费套餐内永久免费:25GB 存储 + 每月 25 RCU + 25 WCU,约等于每月 2500 万次读取或 250 万次写入(按 4KB/1KB 计),个人项目完全够用,超出部分才按量计费。

Q: DynamoDB 和 RDS 怎么选? A: 看查询模式:按主键精确读写、无多表 JOIN 的场景用 DynamoDB;需要复杂 SQL、跨表事务、报表统计的用 RDS。两者可以共存,没有替代关系。

Q: 什么时候用按需、什么时候用预置? A: 流量不确定或波动大用按需,省心不怕限流;流量稳定且利用率超过 30% 用预置 + Auto Scaling,成本低 2~3 倍。两种模式随时可以一键切换。

Q: DynamoDB 支持 SQL 查询吗? A: 支持 PartiQL(SQL 兼容语法)直接查询,但只适合简单条件;复杂聚合分析建议用 Athena 或导出到 Redshift。

Q: 分区键怎么设计才不踩坑? A: 保证取值基数大且分布均匀,避免单一热点键;需要按时间排序的加排序键;先确定访问模式再设计,尽量让一个分区键覆盖一个实体的全部数据。

Q: 可以把现有 MySQL 迁到 DynamoDB 吗? A: 可以,用 AWS DMS(数据库迁移服务)可在线同步;但建议先梳理查询模式,只迁移"纯 KV 读写"的表,关系型部分留在 RDS。

总结

DynamoDB 是最适合个人开发者和创业团队入门的 AWS 数据库:免费套餐永久有效、零运维、自动扩容、按量付费。按本文路线:先按需模式建表 → 控制台插入测试数据 → CLI/Python 跑通读写 → 给关键表加 CloudWatch 告警和 TTL → 流量稳定后切预置省钱,一个高并发应用的数据层 30 分钟就能上线。需要搭建完整云环境时,别忘了配合 AWS EC2 选购省钱攻略 和 AWS 账单管理 10 个设置 控制总成本。

⚠️ 文中价格为 2026 年参考价,实际费用随区域和官方调价变动,请以 AWS 官网为准。

🚀 需要 AWS 国际版账号?通过 3.chengzicloud.cloud 获取最新注册教程与专属优惠,助你轻松上云。

本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多