自动化与脚本
用 DynamoDB-Toolbox v2 在…
在 TypeScript 服务或无服务器应用中用 DynamoDB-Toolbox v2 定义表/实体、执行 CRUD、查询、批处理与事务操作时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 DynamoDB-Toolbox v特定
解决思路
- 从访问模式出发:先确定读写查询,再设计键。
- 创建表与实体边界:单表设计时使用一张表、多个实体。
- 用约束定义 schema:应用 `.key()`、`.required()`、`.default()`、`.transform()`、`.link()`。
- 所有操作统一使用 `.build()` 命令:避免临时构造命令,以保证一致性和类型安全。
- 补充查询/索引覆盖:为每个必需的访问模式验证 GSI/LSI 路径。
- 有意识地使用批处理/事务:批处理提升吞吐,事务保证原子性。
- 保持条目可演进:使用可选字段、默认值和派生属性支持 schema 演进。
- 安装依赖:`npm install dynamodb-toolbox @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb`。
- 初始化客户端:用 `DynamoDBClient` 和 `DynamoDBDocumentClient.from(client)` 创建 documentClient,并传入 `new Table({...})`。
- 定义 Table:指定 `name`、`partitionKey`、`sortKey`、`indexes`(如 `byType` 全局索引)和 `documentClient`。
- 定义 Entity schema:用 `item({...})` 配合 `string()`、`number()`、`list()`、`map()` 等,并应用 `.required()`、`.default()`、`.transform()`、`.enum()`、`.optional()`。
- 用 `computeKey` 统一生成 PK/SK/GSI 键,例如 `PK: TENANT#${tenantId}`、`SK: USER#${userId}`。
- 用 `.build(PutItemCommand).item({...}).send()` 写入条目。
- 用 `.build(GetItemCommand).key({...}).send()` 读取条目。
- 用 `.build(UpdateItemCommand).item({...}).send()` 更新,配合 `$add(1)` 等更新表达式。
- 用 `.build(DeleteItemCommand).key({...}).send()` 删除条目。
- 用 `AppTable.build(QueryCommand).query({ partition, range: { beginsWith } }).send()` 执行主键查询。
- 用 `AppTable.build(QueryCommand).query({ index, partition }).options({ limit }).send()` 执行 GSI 查询。
- 用 `AppTable.build(ScanCommand).options({ limit }).send()` 执行有界扫描。
- 用 `AppTable.build(BatchWriteCommand).requests(...).send()` 执行批处理写入。
- 用 `AppTable.build(TransactWriteCommand).requests(...).send()` 执行事务写入。
- 单表设计:每个业务概念建模为带严格 schema 的实体。
- 保持 PK/SK 可预测且可组合(`TENANT#`、`USER#`、`ORDER#`)。
- 把访问路径编码进 GSI 键,而不是用内存过滤。
- 审计/历史数据优先使用只追加时间线。
- 用限定分区和分片控制热分区。
- 先按访问模式设计键,再推导实体属性。
- 键组合保持单一来源(`computeKey`)以避免漂移。
- 仅在需要严格读后写一致时使用 `.options({ consistent: true })`。
- 运行时请求路径优先使用定向查询而非扫描。
- 为幂等性和乐观并发控制添加条件表达式。
- 执行前校验批处理/事务大小限制,避免部分失败。
- 避免在请求路径中使用表扫描,除非明确有界。
- 对并发敏感的更新使用条件写入。
- 事务有限且比单项写入慢,仅用于真正需要原子性的场景。
- 实现前根据目标吞吐量验证键设计。
适用边界 · 注意事项
- 未安装 dynamodb-toolbox 与 AWS SDK v3 时无法使用。
- 请求路径中不应使用无界表扫描。
- 事务仅用于真正需要原子性的场景,不要用于普通写入。