Amazon dynamodb DynamoDB GSI重载是带来性能优势还是带来灵活性

Amazon dynamodb DynamoDB GSI重载是带来性能优势还是带来灵活性,amazon-dynamodb,amazon-dynamodb-index,Amazon Dynamodb,Amazon Dynamodb Index,GSI重载是否提供任何性能优势,例如通过允许更有效地路由缓存的分区密钥?或者主要是为了防止GSI耗尽?或者打开其他可能不那么明显的查询模式 e、 g.如果您有一个基表,并且希望对其进行分区,以便可以在两个维度上查询特定属性(成为GSI的PK),那么创建1个重载GSI或2个非重载GSI是否有任何区别 有关我所指内容的示例,请参见所附图像: 基表中的文档可以处于已发布或草稿状态。每个文档都由一个用户拥有。我希望能够按用户查询以查找: 按日期公布的文件 按日期起草文件 我问的是关于最近的Dynam

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

e、 g.如果您有一个基表,并且希望对其进行分区,以便可以在两个维度上查询特定属性(成为GSI的PK),那么创建1个重载GSI或2个非重载GSI是否有任何区别

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

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

  • 按日期公布的文件
  • 按日期起草文件
  • 我问的是关于最近的DynamoDB最佳实践,它意味着所有应用程序只需要一个
    表。本文档中展示的一些技术展示了如何将一个相当复杂的关系模型压缩成1个DynamoDB表和2个gsi,但仍然支持10-15个查询模式


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

    简单地说,这个想法是不需要在数据库层上进行连接,也不需要返回数据库,以便有效地尝试在应用程序层上进行连接。通过以应用程序所需的格式对数据进行切片,您真正需要做的就是从表中执行一个
    select*调用,其中x=y
    调用在一个调用中返回多个实体(在您的示例中,可能是
    用户
    文档
    )。这意味着它将在db级别上非常高效和可扩展。但也意味着,由于需要提前了解访问模式并相应地对数据建模,因此灵活性会降低

    请看Rick Houlihan关于这方面的精彩演讲,了解您为什么要这样做

    我不认为它有任何性能优势,至少没有一个没有被调用过——这是有意义的,因为它是同一个查询和存储引擎


    话虽如此,我认为使用单个表有一些实际原因,因为它可以让您的基础结构保持简单:您不必跟踪单独表的度量和/或资源调配设置。

    我的观点是存储成本和资源调配吞吐量


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

    谢谢,是的,我的问题是为了回应观看该视频。但我的问题不是你为什么要使用GSI。关于为什么要使用GSI重载的单个表而不是多个表/GSI的更多信息。每个表的GSI限制现在是20。因此,我试图了解是否还有其他与性能相关的原因,为什么您可能更喜欢更少的表/GSI。例如,如果您有使用相同分区键但方式不同的GSI。我相信每个GSI在分区方面都是独立处理的,我不认为有任何性能相关的东西。至少,我听说过或见过的人都没有叫出来。我用一些实际的理由更新了我的答案。我只是写了一个很长的问答,简言之,这可能有点帮助,不要这样做!