3

我们正在设计一个使用 DynamoDB 作为存储系统的应用程序。

我们确定了不同的访问模式,在查看了 Global Secondary Indexes 文档后,我们决定使用哪种方法:索引重载或具有 2 个稀疏索引。

为了提供更多上下文,我们的应用程序存储订单,我们可以有内部或外部订单。基于此,它们将链接到客户或仓库:

数据模型

由于我们想按客户和/或仓库进行搜索,我们考虑了 2 个解决方案。

第一个解决方案是,保留上述数据结构,在以下位置创建 2 个索引:

  • GSI1 - 客户 (PK)
  • GSI2 - 仓库 (PK)

第二种解决方案是重载另一列,例如:

索引重载

所以只需要 1 个索引:Destination (PK),并且查询应用带有前缀。

问题是:“索引重载与拥有 2 个不同的稀疏全局二级索引相比有什么好处吗?” (容量配置、数据传输、查询时间、数据复杂性等方面的成本节省......)

4

1 回答 1

1

由于我还没有得到任何答案,我将添加我的意见。

在这两种情况下,这两种方法之间没有太大区别,所有项目最终都会被索引并存储类似的属性。


我能找到的一些好处是:

使用 2 GSI 的好处

  1. 数据模式更容易理解(没有重载)
  2. 更灵活地发展模式:如果需求发生变化,订单可以同时分配给客户和仓库。
  3. 调整更好预测的能力(可能并不总是适用,但您可能只需要 2 个字段用于客户访问模式,3 个用于仓库)
  4. 较小的索引具有更好的性能

使用 1 GSI 的好处

  1. 无需担心容量单位,它们可以类似于主表。使用 2 个索引时,您需要知道每个索引将包含多少记录,否则您需要过度配置它们。

    示例:如果您将主表中的 50% 的 RCU 和 WCU 设置为每个索引,但您有 70% 的订单是针对客户的,则某些请求将被限制。

总而言之,即使使用 2 个索引可以获得更精确的配置,但最终可能会产生更高的成本,并且需要检查索引配置以不时调整它以访问模式使用情况。

于 2020-04-26T10:56:35.573 回答