首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免热分区,同时仍然提供必要的访问模式

问如何避免热分区,同时仍然提供必要的访问模式
EN

Stack Overflow用户
提问于 2019-10-02 01:22:15
回答 1查看 537关注 0票数 0

我正在尝试为多站点CMS设计一个DynamoDB表。我在定义主键、分区键和排序键以跨分区分发数据并允许查询时遇到了困难。

用户将只能访问其域中的帖子。一些域名会比其他域名有更多的帖子。由于所有查询都需要基于域限制结果,如何在分区之间均匀分布数据(据我所知,您不能跨分区进行查询)?

我最初的想法是使用复合分区键和begins-with来查询:

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

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

我猜排序关键字应该是日期。

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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 01:40:08

schema取决于您打算执行的查询(与NoSQL相反,在SQL模式中,尽可能地将其规范化)。

因此,如果您的查询将是“获取来自特定域的所有帖子”,那么最简单的方法是将“domain”作为索引散列键(使用时间戳作为排序键)。正如你所提到的,这将导致热分区,所以我们需要将"domain“稍微拆分一下,就像这个组合键"domain-year-month”。这样,我们可以确保分区不会超过10 we (当前的DynamoDB限制)。当然,如果我们想要有更多的数据,我们需要扩展得更多:"domain-year-dayOfYear“等等。

所以你的思维方式基本上是正确的,但我不会用"begins-with“。只是因为您通常不会获取分布在多个分区中的大量数据(如果是这样,请将您的分区设置得更大)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58189612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档