Amazon dynamodb 可查询的未绑定项目数量
我一直在考虑查询未绑定数量项目的可能策略 例如,想象一个论坛——你可以有任意数量的论坛帖子按主题分类。您需要支持至少两种访问模式:帖子详细信息视图和按主题列出的帖子Amazon dynamodb 可查询的未绑定项目数量,amazon-dynamodb,Amazon Dynamodb,我一直在考虑查询未绑定数量项目的可能策略 例如,想象一个论坛——你可以有任意数量的论坛帖子按主题分类。您需要支持至少两种访问模式:帖子详细信息视图和按主题列出的帖子 // legend PK = partition key, SK = sort key 虽然很容易获得一篇文章,但如果不进行扫描,就无法有效地查询文章列表 PK = postId 非常适合查询给定主题的所有帖子,但所有帖子都位于同一分区(“热分区”) 将物品储存在桶中,例如每天新的桶。这会将大量逻辑推送到应用层并增加延迟。例如,
// legend
PK = partition key, SK = sort key
虽然很容易获得一篇文章,但如果不进行扫描,就无法有效地查询文章列表
PK = postId
非常适合查询给定主题的所有帖子,但所有帖子都位于同一分区(“热分区”)
将物品储存在桶中,例如每天新的桶。这会将大量逻辑推送到应用层并增加延迟。例如,如果你需要获得10篇文章,你必须查询今天的文章,如果文章少于10篇,则查询昨天的文章,等等。甚至不要让我开始分页。如果它越过桶,那可能是一场噩梦
PK = topic#date and SK = postId#addedDateTime
所以我的问题是如何以“DynamoDB方式”存储和查询未绑定的项列表?我认为您已经很好地了解了您的选项 我不能自称知道一条真正的路™ 为了解决DynamoDB中的这个特殊问题,为了便于讨论,我将抛出一些想法 虽然很容易获得一篇文章,但如果不进行扫描,就无法有效地查询文章列表
PK = postId
如果您的主键只包含postId
(我将使用POST#
使其更易于阅读),则肯定会出现这种情况。那张桌子看起来像这样:
这对于“fetch post details view(aka fetch post by ID)”访问模式来说是非常高效的。但是,我们没有内置任何方式来按主题访问一组帖子。下面让我们来试一试
有几种方法可以模拟帖子和主题之间的一对多关系。首先想到的是在主题
字段上创建一个二级索引。从逻辑上讲,这看起来是这样的:
现在我们可以通过高效的<代码>查询>代码>操作来获取一个项目的帖子集合。如果每个主题的帖子数量越来越大,分页将有助于您。这可能对您的应用程序足够了。为了这个讨论,假设它创建了一个热分区,并考虑我们可以引入哪些策略来减少。这就是问题所在
一个选项 你说 将物品储存在桶中,例如每天新的桶 这是一个好主意!让我们将次要索引分区键更新为#
,这样我们就可以在给定的时间范围内(天/周/月/等)按主题对帖子进行分组
我在这里做了几件事:
POST#1
和POST#2
都在9月份的时间戳处发布了一个POST#u。我将这两个时间戳都截断为2020-09-01
,以表示整个9月份(或对您的应用程序有意义的任何时间界限)
PK=topic\u CACHE\
,具有包含前N个月帖子列表的列表属性)
如果TOPIC\u CACHE
最终成为热分区,则始终可以使用计算后缀对分区进行切分:
在检索主题缓存时,应用程序可以随机选择介于1..N之间的主题缓存
有很多方法可以实现这种访问模式,而这些选项只代表了几种可能性。如果是我的应用程序,我会首先使用Post主题作为分区键创建一个二级索引。这是最容易实现的,并且会让我有机会看到我的应用程序访问模式在生产环境。如果热键问题开始成为问题,我会深入研究某种缓存解决方案。感谢您确认观看Rick的2-3次演讲是值得的,我现在对NoSQL数据建模有了大致的了解。呵呵。