谈谈Amazon DynamoDB的增删改查(CRUD)操作
1. DynamoDB表含义
DynamoDB表概念,对于新手非常不友好,而且官网介绍比较粗略。不少应该有例子的地方,没有给出代码例子。也就是说,文档也不友好。我尝试友好的说几句,看看能否“直击痛点”:
- NoSQL型:这点大家容易理解
- 必须要有主键:这点和MongoDB型NoSQL不同,也和MySQL等SQL型数据库不同
- 主键还一大堆约束
- 查询也有一大堆约束
2. DynamoDB的主键
DynamoDB的主键,可以是1个字段,也可以是2个字段,不能含有2个以上字段。
- 如果是1个字段主键,那么这个字段可以唯一定位记录。这个primary key也叫:partition key
- 如果有2个字段主键,那么第一个字段叫:partition key;第二个字段叫:sorted key
如果想要高效查询,即Query操作;另一种不高效“查询”,在DynamoDB的世界,叫Scan操作。
- Query操作,必须指定partition key,sorted key即使存在,也可以不指定
- Scan操作,全表查询,官方不推荐使用
3. 根据Index查询
比如,交易记录表(Trans)含有字段:
id,from,to,amount,createAt,status这些字段,其中id为主键。
因为查询(Query)操作,必须要指定Partition Key的等式筛选条件。假如当前要查询status=1的交易记录。因为status不是Partition Key,因此无法执行这样的where条件:
where status=1 // 这个是伪代码
table.Get("status", 1) // Go 查询语法
因此,按照DynamoDB的规则,我们可以创建Secondary Index来实现。
Partition Key: status
Sort Key: id
这样,查询语句类似
where status=$status
4. 分页
MySQL的分页语法是:
select * from Table limit 20, 10 //查询21~40行记录
DynamoDB的分页语法是:
// status=1的查询,查询出来的第20条记录的id
// 一般情况下,由前端保存前面20条记录,查询第二页的时候,传给后台
lastEvaluatedKey=map[string]*dynamodb.AttributeValue{