我对如何为给定查询需求设置表和索引的最佳实践感兴趣。我对分区和排序键或LSI和GSI二级索引等相关概念有了基本的了解,但是将它们放在一起并设计一个或多个支持可触及示例的索引的表存在问题。DynamoDB中的数据库设计:书签存储
我看到的例子是“书签存储”,其中多个用户可以将书签存储到URL并用一些标签对其进行注释。 A User
有多个Urls
(=书签)。每个Url
都有一个日期,可以有一个或多个Tags
。
的书签可能具有以下基本结构:
{
"user": "watQuadrat",
"url": "http://stackoverflow.com",
"date": 1494161436362,
"tags": [ "forum", "programming" ]
}
在这一点上我最大的问题是如何建立的表结构,这样我可以适应各种不同的方式中的数据可以查询,例如:
- 列出所有
Tags
为User
,由用户多久使用的标签 - 列出所有
Tags
为排序,按字母顺序 - 列出所有
Tags
分类为Url
,通过这个标签是如何经常地给出了网址 - 列出所有
Tags
匹配一个给定的搜索字符串,排序排序多久使用了标签(例如搜索“店”,返回匹配所有的标记,如由他们是如何经常使用“购物”的顺序) - 列出所有
Urls
为User
,按日期排序 - 列出所有
Urls
为User
和Tag
,按日期排序 - 列出所有
Urls
为Tag
,由标签是如何经常地给每个URL - 列出所有
Users
为Url
,按日期排序排序
这将如何设计,以便我可以以高性能的方式执行所有这些查询?当您另外尝试降低成本时,您是否会设计出任何不同?
我想使用的用户标识作为分区键和URL作为排序关键也是。通过阅读你的答案,我意识到我没有足够精确地描述我的查询需求,所以我相应地更新了我的问题。我希望现在查询要求是可以理解的。 感谢您的帮助和见解! – Codepunkt
嘿,这很有趣。我根据您提到的更新要求更新了答案。 – Asanka