用途
该技能用于指导在 AWS DynamoDB 上进行数据建模与开发。资料给出的核心理念是“为访问模式而设计,而非为实体而设计”,即在设计表结构之前先明确查询需求,围绕数据访问方式进行建模,单表设计通过通用键属性在同一张表中存放多种实体类型。
主要能力与概念
资料列出以下关键概念:分区键(PK,决定数据分布的主键属性)、排序键(SK,可选,用于分区内范围查询)、GSI(全局二级索引,可替换分区/排序键)、LSI(本地二级索引,相同分区、不同排序)、Item(单条记录,最大 400 KB)、Attribute(条目中的字段)。
单表设计的理由是:在单次查询中获取关联数据、减少往返次数和成本、支持跨实体类型的事务、简化运维(备份、恢复、IAM)。资料给出的通用键模式为 BaseItem 接口,包含 PK、SK、可选的 GSI1PK/GSI1SK、EntityType 等字段。
示例模型与访问模式
资料以电商为例:用户(USER#123 / PROFILE)、地址(ADDRESS#1)、用户订单(ORDER#2024-001 等)、订单项(ORDER#2024-001 / ITEM#1)、商品(PROD#456 / PRODUCT)。可覆盖的访问模式包括:获取用户资料、获取用户及其地址、获取用户全部订单、按订单 ID 查询订单、获取订单及其条目、获取商品详情。
使用方式(SDK v3 TypeScript)
安装依赖:npm install @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb。客户端配置区分常规区域客户端与本地端点(DYNAMODB_LOCAL 时指向 http://localhost:8000),并通过 DynamoDBDocumentClient 设置 marshallOptions(removeUndefinedValues、convertClassInstanceToMap)和 unmarshallOptions(wrapNumbers)。
类型定义区分 BaseItem、User、Order,并提供 keys 键构建器(user、userOrders、order)。操作示例包括:PutCommand(含 attribute_not_exists(PK) 防覆盖)、GetCommand、QueryCommand(begins_with 前缀查询、ScanIndexForward 排序、GSI 查询、Limit + ExclusiveStartKey 分页)、UpdateCommand(动态构建更新表达式、ReturnValues: ALL_NEW、ConditionExpression: attribute_exists(PK)、if_not_exists 原子计数器)、DeleteCommand。
批量与事务:BatchWriteCommand(每批最多 25 条,分块)、BatchGetCommand(最多 100 条)、TransactWriteCommand(原子多条目写入,示例为创建订单 + 更新用户订单计数 + 写入订单项)。
GSI 模式与新增特性
资料介绍稀疏索引(仅含 GSI1PK 属性的条目进入索引,适合 featured/flagged 场景)与倒排索引(按状态查询所有用户的订单,如 STATUS#pending)。还提到 2025 年 11 月起的多属性复合键特性:每个分区/排序键最多支持 4 个属性,无需再构造类似 TOURNAMENT#WINTER2024#REGION#NA-EAST 的合成键。
Python(boto3)
依赖 boto3>=1.34.0,使用 boto3.resource('dynamodb'),支持 endpoint_url 用于本地开发;示例涵盖 create_user、get_user、get_user_orders、update_user、delete_user,条件表达式使用 Key 与 Attr。
本地开发
DynamoDB Local 可通过 Docker 启动:docker run -d -p 8000:8000 amazon/dynamodb-local,并使用 aws dynamodb create-table 指定 endpoint-url 在本地建表(含 GSI1 与 PAY_PER_REQUEST 计费模式)。资料同时提到 NoSQL Workbench 用于可视化数据建模与查询,并提供 CLI 速查参考入口。
限制与暂未提供
资料未说明具体价格、性能指标保证、各操作的成本数值、与其它数据库的对比结论、版本兼容性细节或配额上限(除 Item 400 KB、批写 25 条、批读 100 条等已明确项外)。GSI 的吞吐与投影限制、错误重试策略、安全与权限配置细节均暂未提供。