簡體   English   中英

在NoSQL DynamoDB中建模數據

[英]Modeling data in NoSQL DynamoDB

我試圖弄清楚如何在AWS DynamoDB表中對以下數據建模。

我有很多物聯網設備,每個設備每隔幾秒鍾發送一次遙測數據。

屬性

  1. 設備ID
  2. 時間戳
  3. malware_name
  4. 公司名
  5. action_performed(兩個可能的值)

查詢

  1. 顯示上周發生的所有事件。
  2. 顯示特定device_id的所有事件。
  3. 顯示所有帶有“ unable_to_remove”操作的事件。
  4. 顯示與特定惡意軟件有關的所有事件。
  5. 顯示與特定公司有關的所有事件。

思考

  1. 我知道我可以為每個屬性添加GSI,但是我只想在沒有其他選擇的情況下使用GSI,因為這會花費我更多的錢。

  2. 什么是主主鍵(partition-key:sort-key)?

請分享您的想法,因為我想學習如何思考和考慮什么,而不是為特定問題提供答案,因此我更關心它們而不是完美答案。

非常感謝 !

如果您絕對需要提到的可查詢性模式,則別無選擇,只能為每個模式創建GSI。 這也有一些警告:

  • 對於查詢#1,您的GSI將是incident_date (或其他)作為分區鍵,而device_id是排序鍵。 根據您的訪問模式,這可能導致DynamoDB中的熱分區。
  • 每個表有5個GSI的限制,您將立即用完。 如果將來需要支持另一種查詢,該怎么辦?

在評估在給定情況下使用NoSQL的利弊時,需要同時考慮讀寫訪問模式。 因此,您應該問的問題是,為什么要使用DynamoDB?

例如,您真的需要實時查詢嗎? 如果沒有,您可以將DynamoDB用作主數據庫,並定期將數據(使用AWS Lambda或Kinesis Firehose)同步到EMR或Redshift,以進行后續批處理。

編輯 :建議的主鍵:

  • device_id作為分區鍵和incident_date作為排序鍵, 如果你知道,沒有2個或更多的事件,對於給定device_id ,可以來在精確的同一時間。
  • 如果上述方法不起作用,則將incident_id作為分區鍵,將incident_date作為排序鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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