什么是Secondary Indexes
二级索引的存在主要是为了支持基于不同字段的多种查询和排序操作.
DynamoDB表最基本的查询操作包括以下三种:
- 一是根据主键进行查询,这是精确的查询,主键可以是只包含hashKey的简单主键,也可以是包含hashKey和rangeKey的组合主键
- 二是根据hashKey进行查询操作,适用于组合主键的情况.可以获取拥有相同haskKey的所有数据,也就是查询操作是必须指定一个haskKey并以rangeKey进行排序,排序方式支持rangeKey升序或者降序.
- 三是扫描(scan)整张表,这个是dynamodb不推荐的操作,因为cost比较大,扫描整张表就是会读取整张表,即便加了其他的filter条件,也是读取完所有的数据之后再做的过滤,扫描表的cost会按整张表的数据来计算,不光是花钱多,效率也很低,所以是dynamodb不推荐的操作.
综合上面三种操作我们发现,基于基表的查询操作比较局限, 只能支持一种特定的查询和排序操作.
那如果我想支持多种排序方式怎么办?
解决方案就是使用二级索引,二级索引有两种, Global Secondary Indexes和 Local Secondary Indexes.
特征 | 全局二级索引 | 本地二级索引 |
---|---|---|
键架构 | 可以是简单主键(分区键)或复合主键(分区键和排序键) | 必须是复合主键(分区键和排序键) |
键属性 |