【问题标题】:How to avoid hot partitions and still provide necessary access patterns如何避免热分区并仍然提供必要的访问模式
【发布时间】:2019-10-01 17:22:14
【问题描述】:

我正在尝试为多站点 CMS 设计 DynamoDB 表。我很难定义主键、分区键和排序键以跨分区分布数据并允许我进行查询。

用户将只能访问其域中的帖子。有些域的帖子比其他域多得多。由于所有查询都需要根据域限制结果,我怎样才能将数据均匀地分布在分区之间(据我了解,您不能跨分区查询)?

我最初的想法是使用复合Partition Key和begins-with来查询:

Domain | Post-Type | Post-Year | Post-Month | Post-Day | slug

example.com / blog / 2019 / 09 / 30 / post-slug

排序键是我猜的日期。

当这个分区键被散列时,它会很好地分布吗?大多数查询将针对特定域和按日期排序的帖子类型。有没有更好的方法来解决这个问题?

提前致谢。

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    NoSQL 模式取决于您打算执行的查询(与 SQL 在哪里尝试尽可能地对其进行规范化相反)。

    因此,如果您的查询是“从特定域获取所有帖子”,那么最简单的方法是将“域”作为索引哈希键(使用时间戳作为排序键)。正如您所提到的,这将导致热分区,因此我们需要将“域”拆分一下,例如这个复合键“域-年-月”。通过这种方式,我们确保分区不会超过 10GB(当前 DynamoDB 限制)。当然,如果我们会有更多的数据,我们需要对其进行更多的扩展:“domain-year-dayOfYear”等等。

    所以你的思维方式大多是正确的,但我不会使用“begins-with”。只是因为您通常不会获取分布在多个分区中的大量数据(如果是,请让您的分区更大)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-25
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多