我正在尝试为多站点CMS设计一个DynamoDB表。我在定义主键、分区键和排序键以跨分区分发数据并允许查询时遇到了困难。
用户将只能访问其域中的帖子。一些域名会比其他域名有更多的帖子。由于所有查询都需要基于域限制结果,如何在分区之间均匀分布数据(据我所知,您不能跨分区进行查询)?
我最初的想法是使用复合分区键和begins-with来查询:
Domain | Post-Type | Post-Year | Post-Month | Post-Day | slug
example.com / blog / 2019 / 09 / 30 / post-slug
我猜排序关键字应该是日期。
当这个分区键被散列时,它会很好地分布吗?大多数查询将针对特定的域和按日期排序的post类型。有没有更好的方法来解决这个问题呢?
提前谢谢。
发布于 2019-10-02 01:40:08
schema取决于您打算执行的查询(与NoSQL相反,在SQL模式中,尽可能地将其规范化)。
因此,如果您的查询将是“获取来自特定域的所有帖子”,那么最简单的方法是将“domain”作为索引散列键(使用时间戳作为排序键)。正如你所提到的,这将导致热分区,所以我们需要将"domain“稍微拆分一下,就像这个组合键"domain-year-month”。这样,我们可以确保分区不会超过10 we (当前的DynamoDB限制)。当然,如果我们想要有更多的数据,我们需要扩展得更多:"domain-year-dayOfYear“等等。
所以你的思维方式基本上是正确的,但我不会用"begins-with“。只是因为您通常不会获取分布在多个分区中的大量数据(如果是这样,请将您的分区设置得更大)。
https://stackoverflow.com/questions/58189612
复制相似问题