我對如何爲給定查詢需求設置表和索引的最佳實踐感興趣。我對分區和排序鍵或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