AmazonDynamoDB全面解析
立即解锁
发布时间: 2025-08-22 01:50:56 阅读量: 1 订阅数: 3 


AWS Certified Database Specialist Exam Prep
### Amazon DynamoDB 全面解析
#### 1. DynamoDB 表设计基础
在设计 DynamoDB 表时,首先要明确数据库需要回答的问题。例如,对于高分表,可能会有以下问题:
- John Smith 在“Space Mission”游戏中的最高分是多少?
- “Bug Hunt”游戏有史以来的最高分是多少?
- 谁在“Space Mission”游戏中获得了最高分?
理解这些问题对正确设计表很重要,因为这涉及到 DynamoDB 的查询机制。
#### 2. DynamoDB 表的查询和扫描
DynamoDB 有两种检索数据的方法:
- **查询(Query)**:只能通过键属性进行查询。如果查询的属性不是键的一部分,则需要扫描整个表。查询非常快,即使在有百万行的表上,也能直接定位到所需行。但查询只能针对分区键进行,例如在“GameScores”表中,只能使用“PlayerID”和“GameName”列进行查询过滤。示例查询代码如下:
```bash
aws dynamodb query \
--table-name GameScores \
--key-condition-expression "PlayerID = :playerid AND GameName = :gamename" \
--expression-attribute-values '{
":playerid": { "S": "KateG" },
":gamename": { "S": "Space Mission" }
}'
--projection-expression "PlayerID, GameName"
```
- **扫描(Scan)**:当需要过滤的属性不在任何表或索引键中时使用。扫描会读取表中的每一条记录,因此成本较高,性能也会随着表的增大而迅速下降。示例扫描代码如下,用于返回高分大于 5000 的所有记录:
```bash
aws dynamodb scan \
--table-name GameScores \
--filter-expression "Score < :score" \
--expression-attribute-values '{":score":{"S":"5000"}}'
```
为了提高查询性能,可以使用全局二级索引(GSI)和本地二级索引(LSI)。例如,要获取某个游戏的最高分,可以将“GameName”设为分区键,“Score”设为排序键,通过 GSI 实现。
#### 3. 分区(Partitions)
分区键不仅可以用于查询以提高性能,还能控制数据在磁盘上的物理排列和存储。DynamoDB 通过分片技术将数据分布在大量计算机上,分区键定义了应位于同一分区(即同一物理位置)的数据。这使得返回具有相同分区键的大量记录的查询可以从一个位置获取,大大提高了查询速度并优化了成本。
但使用分区键控制数据位置可能导致某些分区使用过度,形成“热点分区”,影响性能。因此,选择分区键时要确保其值分布均匀。
分区内的记录按定义的排序键排序,这可以加快频繁检索前几条记录的查询速度,例如使用日期作为排序键,可使最新日期的记录优先被检索。
#### 4. 操作 DynamoDB 记录
DynamoDB 使用应用程序编程接口(API)来控制对其的访问,有七种主要的 API 方法用于数据操作和检索:
- **PutItem**:用于将记录加载到数据库中。示例代码如下:
```bash
aws dynamodb put-item \
--table-name GameScores \
--item '{
"PlayerID": {"S": "KateG"}
}'
```
- **GetItem**:根据键返回单个记录。示例代码如下:
```bash
aws dynamodb get-item \
--table-name GameScores \
--projection-expression "Score, PlayerID" \
--key '{
"PlayerID": {"S": "KateG"}
}'
```
- **UpdateItem**:根据键修改单个记录,有四种操作选项:
- **SET**:设置记录属性的值。示例代码如下:
```bash
aws dynamodb update-item \
--table-name GameScores \
--key '{
"PlayerID": {"S": "KateG"}
}' \
--update-expression 'SET Score = :s' \
--expression-attribute-values '{
":s": {"N": "4523"}
}'
```
- **REMOVE**:移除记录属性的值。示例代码如下:
```bash
aws dynamodb update-item \
--ta
```
0
0
复制全文
相关推荐










