在DynamoDB表中使用GSI时估算额外的维护成本

时间:2018-07-28 03:31:43

标签: database amazon-web-services amazon-dynamodb

我在DynamoDB中有一个用户表,该表具有唯一的哈希键username。但是,我希望能够通过仅提供用户名或仅提供电子邮件(电子邮件也是唯一的)来以最有效的方式找到特定用户。我可以使电子邮件成为全局二级索引,但是在估算这种方法的额外成本时遇到了麻烦。使用索引检索用户会导致两次读取操作吗?还是到底要进行多少次操作?

此外,我希望索引的读写吞吐量等于表的吞吐量(理想情况下会自动缩放),我可以通过在使用API​​创建索引时不提供特定的吞吐量值来做到这一点吗?提供他们?

1 个答案:

答案 0 :(得分:1)

从索引中检索值所需的读取操作数将取决于您要读取的值(所有值与只是一个子集)以及索引的投影类型是什么。如果投影为ALL,则只需读取1次,但可能会花费更多。如果投影为KEYS_ONLY,您将只取回表的主键,那么您将不得不再次查询该表。这需要读取1次以上,但可能更便宜。这完全取决于您的用例和使用模式。

请参见“ https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html”中的“属性投影”

我认为您需要在创建索引时提供读取容量和写入容量-它不会从父表继承任何值。尽管如果表正在使用自动缩放,则可以将自动缩放配置自动应用于GSI。参见https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AutoScaling.Console.html#AutoScaling.Console.ExistingTable