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

dol*_*s3m 0 database amazon-web-services amazon-dynamodb

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

此外,我希望索引的读写吞吐量等于表的吞吐量(理想情况下,自动缩放),我可以通过在使用 API 创建索引时不提供特定吞吐量值来实现,还是必须提供它们?

Bri*_*ant 5

从索引中检索值所需的读取操作数将取决于您想要读取的值(所有这些值与只是一个子集)以及索引的投影类型是什么。如果投影为 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