4.1 DynamoDB

  • date_range 2021-05-05 info
    sort
    article
    label
    AWS
  1. 概念
    1. consistent reads
  2. 配置
  3. partition key
    1. 如何选择 partition key
  4. 其他
    1. 练习题
  5. 次级索引 Secondary Indexes
    1. Global secondary index
    2. Local secondary index
    3. 对比

概念

Read capacity unit (RCU) :1RCU=4KB aws

  • 数据<=4KB时,
    • 1RCU 能执行 1 个Strongly consistent reads
    • 10RCU 能执行 10 个Strongly consistent reads
    • 10RCU 能执行 20 个Eventually consistent reads
  • 4KB<数据<=8KB时,2RCU 能执行 1 个Strongly consistent reads

Write capacity unit (WCU):1WCU=1KB

  • 数据<=1KB时
    • 1WCU 执行1个 standard write
    • 2WCU 执行1个 Transactional write
  • 1KB<数据<=2KB时
    • 2WCU 执行1个 standard write

consistent reads

此处介绍了如何配置 read consistency 。Read Consistency有两种类型:aws

Eventually consistent reads(默认):当有写操作时,可能读取的不是最新数据。

Strongly consistent reads

  • 获取最新的数据
  • 不支持 global secondary indexes
  • 比 Eventually consistent reads 消耗更多的吞吐量容量throughput capacity

配置

DynamoDB 有两种读写容量模式Capacity Modeaws

  • 按需On-Demand
  • 配额Provisioned (默认,且可以免费使用)

按需模式常用于:

  • 工作量不明确时
  • 有不可以预测的流量
  • 喜欢按需付费

配额模式常用于:

  • 可预测的流量
  • 流量稳定或逐步稳定上升
  • 希望费用在可控范围内

partition key

根据 Choosing the Right DynamoDB Partition Key 描述,DynamoDB支持两种主键primary keys

  • Partition key
  • composite primary key = (Partition Key , Sort Key):相当于关系数据库的 复合主键composite primary key,Sort Key 用于排序。这种情况下,Partition Key可能一样的,但是sort key一定是不同的

DynamoDB 中,获取和存储数据是根据主键的键值,该值必须是唯一的,该值分布在 10-GB storage units 里,这 10 GB 就叫 partitions。每一张表中有一个会有若干个 partitions。就像文章的图所示:

img

DynamoDB 查找数据的过程是这样:

  1. 将 partition 的键值作为输入参数,传给 内部哈希函数internal hash function
  2. 内部哈希函数internal hash function 计算出数据所在的 partition 以及位置。

数据查找过程的图文可以查看此处。另外,同一个 partition 的数据将存在一起,复合主键的情况,则会根据 sort key 进行排序。

如何选择 partition key

  1. 尽可能选择键值是唯一的。这样可以使数据分布均匀
    • 尽量使 partition key 的访问次数均匀
  2. 符合键,或者查询时会使用多个键,可以考虑将其组合起来。如,把 customerid+productid+countrycode 作为 partition key
  3. 键值的生成不应该使用 auto increment,可能产生冲突

其他

练习题

A Developer is working on an application that tracks hundreds of millions of product reviews in an Amazon DynamoDB table. The records include the data elements shown in the table:

img

Which field, when used as the partition key, would result in the MOST consistent performance (安定的性能)using DynamoDB?

  • A. starRating
  • B. reviewID
  • C. comment
  • D. productID

题目出自:https://www.examtopics.com/exams/amazon/aws-certified-developer-associate/view/

次级索引 Secondary Indexes

次级索引Secondary Index 有两种:

  • 全局次级索引Global secondary index(GSI)
  • 局部次级索引Local secondary index(LSI)

Global secondary index

An index with a partition key and sort key that can be different from those on the table.

此处可以看出,使用 GSI 使用的 partition key 与 composite primary key 的 partition key 可能不同,也就是说,在 GSI 中查找到的数据,通过该数据找到 composite primary key 的数据,这个过程将是比 LSI 麻烦。

Local secondary index

An index that has the same partition key as the base table, but a different sort key

说明 "LSI = partition key + sort key" 。由于 sort key 不仅用于排序,而且用于过滤数据,因此 LSI 只是将 composite primary key 的替换了 sort key(过滤条件)而已。查询时,应该是这样:

  1. LSI 的 partition key + 函数 = partion-A + Location
  2. 使用 LSI 的 sort key 将 partion-A的 LSI 的数据过滤一下,看看存在Location否
  3. 如果Location存在,那么跳回 partion-A
  4. 跳回 partion-A 后,查找对应的Location,获得数据

而使用 composite primary key 的过程,应该是这样:

  1. composite primary key + 函数 = partion-A + Location
  2. 使用 composite primary key 的 sort key 将 partion-A 的数据过滤一下,看看存在Location否
  3. 如果Location存在,则根据Location获取数据

对比

  • LSI 和 composite primary key 它们是共享 预置吞吐量provisioned throughput。GSI 是要额外开启一个 预置吞吐量provisioned throughputstackoverflow

  • TODO 对次级索引分别使用的场景进行总结