[英]database primary key dynamoDB or other
我將DynamoDB用於我的Alexa技能。 在dynamoDB的文檔中,它說主鍵(和任何輔助索引)必須是三種類型之一:二進制,字符串,數字。 我想知道是否有一種方法可以使用數組搜索數據庫,或者使用“標簽”之類的方法來嘗試將數據庫中的某個項目與用於搜索項目的最匹配“標簽”進行匹配。 如果dynamoDB無法做到這一點,是否還有其他數據庫允許此功能? 否則,我可以使用哪種服務(除了數據庫)來進行這種查詢?
DynamoDB專為快速讀取/寫入和大規模擴展而設計。 使用dynamoDB的最佳方法是轉儲記錄數據系統,然后使用某些ID訪問整個對象。 為了提高速度已經做出了一些妥協。 其中之一是復雜的查詢。 對於您的用例,我認為ElasticSearch是最佳選擇。
使用DynamoDB,您可以通過將主鍵組成
這將導致存儲重復的數據,因為您需要存儲每個標簽的項目數據,以便允許快速查詢每個鍵。
結構將是這樣的
Partition (ID) | Sort (Tag) | other attributes
1234 | node.js | { timestamp: "...", message: "...", ... }
1234 | database | { timestamp: "...", message: "...", ... }
1234 | alexa | { timestamp: "...", message: "...", ... }
請注意,每個項目的分區鍵(ID)都相同,但是排序鍵(Tag)會更改。 其他屬性可以是任何您喜歡的屬性,但是在這種情況下,它是重復的。 其他項目將以類似的方式添加,它們的唯一ID作為分區鍵,而標簽作為排序鍵,每個項目一個。
該模型確實針對快速讀取進行了優化。 從項目中刪除標簽后,您將相應地刪除該項目。
但是隨后項目中的某些數據會發生變化,例如message屬性,您需要更改每個項目 ,從而導致多次寫入。 而且,寫入操作不會是原子的,從而導致某些數據可能過時。
當然,這完全取決於應用程序還需要其他哪些數據查詢,以及將要擁有的讀寫次數,無論這是否有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.