代码之家  ›  专栏  ›  技术社区  ›  dols3m

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

  •  0
  • dols3m  · 技术社区  · 8 年前

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

    另外,我希望索引的读写吞吐量等于表的读写吞吐量(理想情况下,是自动伸缩的),在使用API创建索引时,我可以不提供特定的吞吐量值,还是必须提供这些值?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Brian Winant    8 年前

    从索引中检索值所需的读取操作数将取决于要读取的值(所有值与仅一个子集的值相比)和索引的投影类型。如果投影是全部,那么它只需要读取一次,但可能会花费更多。如果投影是key s_ONLY,则只能取回表的主键,然后您将不得不通过该键再次查询表。这需要一次以上的阅读,但可能更便宜。这将取决于您的用例和使用模式。

    参见“属性投影” 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