我在DynamoDB中有两个表:
一篇文章可以有很多标签,例如" php"," html"," design"和" erlang"。
我想查询我的文章表并仅通过以下内容进行分页:
或
我如何才能最有效地完成这项工作?
答案 0 :(得分:2)
不幸的是,您的问题的答案并不在于DynamoDB架构设计。 DynamoDB不一定是正确/最好的工具,不过你可以用它来模拟你的问题。
将DynamoDB视为分布式可扩展哈希映射。如果您以这种方式考虑它,您将意识到您需要对标签到文章的映射进行建模的方式是通过存储对标签进行键控的文章的引用。
所以也许:
articles table:
id (partition key),
title,
text,
tags
tags table:
tag (partition key),
article id (sort key)
请注意,上面的articles
表有一个应用于每篇文章的标签列表,同样的信息也存储在tags
表中。这违反了您可能熟悉的关系数据库规范化模式的最佳实践。但DynamoDB是一个非关系型数据库,因此您必须以不同方式构建数据。
重要的是要提到上面提到的架构很可能会导致分区热点,因为会有一些流行的标签会对应很多文章,而大多数标签会很低基数。处理此问题的潜在策略可能是对标记空间进行子分区。
但是,通过将DynamoDB与其他技术(如弹性搜索)相结合,您可能会获得更好的结果。