簡體   English   中英

數據庫主鍵dynamoDB或其他

[英]database primary key dynamoDB or other

我將DynamoDB用於我的Alexa技能。 在dynamoDB的文檔中,它說主鍵(和任何輔助索引)必須是三種類型之一:二進制,字符串,數字。 我想知道是否有一種方法可以使用數組搜索數據庫,或者使用“標簽”之類的方法來嘗試將數據庫中的某個項目與用於搜索項目的最匹配“標簽”進行匹配。 如果dynamoDB無法做到這一點,是否還有其他數據庫允許此功能? 否則,我可以使用哪種服務(除了數據庫)來進行這種查詢?

DynamoDB專為快速讀取/寫入和大規模擴展而設計。 使用dynamoDB的最佳方法是轉儲記錄數據系統,然后使用某些ID訪問整個對象。 為了提高速度已經做出了一些妥協。 其中之一是復雜的查詢。 對於您的用例,我認為ElasticSearch是最佳選擇。

使用DynamoDB,您可以通過將主鍵組成

  • 分區鍵(每個項目的一些唯一ID),以及
  • 排序鍵(特定標簽)

這將導致存儲重復的數據,因為您需要存儲每個標簽的項目數據,以便允許快速查詢每個鍵。

結構將是這樣的

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM