AWS DynamoDB 无服务器数据库实战:从0搭建高并发NoSQL应用(2026最新教程)
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 |
| 计费 | 按读写请求次数 + 存储量 | 按实例规格 + 磁盘固定付费 |
它的核心概念就三个,先记牢:
- 分区键(Partition Key):决定数据存在哪,查询时最常用,如
userId、orderId。设计好坏直接决定性能上限。 - 排序键(Sort Key):可选。同一分区内再按第二字段排序,如"某个用户的所有订单按时间倒序"。
- 容量模式(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
| 对比维度 | DynamoDB | RDS MySQL | Aurora |
|---|---|---|---|
| 数据库类型 | 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 分钟)
- 登录 AWS 控制台,搜索 DynamoDB 进入服务页面;
- 点击 Create table(创建表);
- Table name 填
orders;Partition key 填orderId,类型选 String;Sort key 填createdAt,类型选 String; - Table settings 选择 On-demand(按需模式,新手默认选这个,避免预置容量费用);
- 其余保持默认,点击 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 个设置(重要)
- 容量模式选对:新表默认按需;月读写利用率稳定超过 30% 后切预置 + Auto Scaling,能省 2~3 倍(详见第二节)。
- TTL 自动过期:会话、验证码、日志类数据开启 TTL(Time to Live),指定过期字段,到期自动删除且不收费,还能持续省存储费。控制台 Table settings → TTL → 指定属性即可。
- 给表建 CloudWatch 告警:监控
ConsumedReadCapacityUnits/ConsumedWriteCapacityUnits,月消耗接近免费额度时提醒你;同时监控ThrottledRequests,防止预置模式被限流。 - 备份按需开:默认关闭备份;只有核心业务表开启 PITR(连续备份,约 $0.20/GB·月),普通表用偶尔的手动按需备份(约 $0.10/GB·次),别全开。
- 分区键均匀设计:不要用"自增 ID"做分区键(会打满一个分区导致热分区、限流);用 userId、随机后缀等分散值,读写才能吃满预留容量。
再补一条免费额度提醒:DynamoDB 的免费套餐(25GB 存储 + 25 RCU + 25 WCU)是永久有效的,和 EC2 的 12 个月免费不同——个人项目只要流量不大,可以一直 0 成本跑(注册账号避坑见 AWS 免费套餐注册教程)。
八、DynamoDB 与 RDS 场景对照:到底怎么选
| 你的需求 | 推荐 | 原因 |
|---|---|---|
| 用户会话、购物车、验证码 | DynamoDB | KV 读写,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 提供,点击访问首页了解更多