1

GSI 重载是否提供任何性能优势,例如通过允许更有效地路由缓存的分区键?还是主要是为了防止您用完 GSI?或者可能会打开其他可能不那么明显的查询模式。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-gsi-overloading.html

例如,我有一个基表,并且您想对其进行分区,以便您可以在二维上查询特定属性(成为 GSI 的 PK),如果您创建 1 个重载 GSI 或 2 个非重载 GSI,它有什么区别吗? GSI。

有关我所指的示例,请参见附图:

https://drive.google.com/file/d/1fsI50oUOFIx-CFp7zcYMij7KQc5hJGIa/view?usp=sharing

基表具有可以处于已发布或草稿状态的文档。每个文档由单个用户拥有。我希望能够由用户查询以找到:

  1. 按日期发布的文件
  2. 按日期起草文件

我问的是最新的 DynamoDB 最佳实践,这意味着所有应用程序只需要one表。本文档中展示的一些技术展示了如何将相当复杂的关系模型压缩为 1 个 DynamoDB 表和 2 个 GSI,但仍支持 10-15 个查询模式。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-relational-modeling.html

我试图理解为什么有人会走这条路,因为它看起来非常复杂。

4

2 回答 2

2

简而言之,这个想法是没有在数据库层进行连接的开销,或者不必返回数据库以有效地尝试在应用程序层进行连接。通过以您的应用程序所需的格式对数据进行切片,您真正需要做的基本上就是进行一次select * from table where x = y调用,该调用在一次调用中返回多个实体(在您的示例中可能是Usersand Documents)。这意味着它将在数据库级别上非常高效和可扩展。但也意味着您的灵活性会降低,因为您需要提前了解访问模式并相应地对数据进行建模。

请参阅 Rick Houlihan 在此https://www.youtube.com/watch?v=HaEPXoXVf2k上的精彩演讲,了解您为什么要这样做。

我不认为它有任何性能优势,至少没有没有被指出的——这是有道理的,因为它是同一个查询和存储引擎。

话虽如此,我认为您为什么要使用单个表有一些实际原因,因为它可以让您的基础架构保持简单:您不必跟踪指标和/或配置设置单独的表。

于 2019-03-13T13:25:36.990 回答
-1

我的意见是存储成本和预置吞吐量。

除此之外不确定新的限制为 20

于 2019-08-27T21:32:55.833 回答