2017-02-23 69 views
1

我一直在嘗試在Amazon Dynamo DB中爲我的Android應用程序創建Schema。我對NoSQL數據庫的經驗非常少。Amazon Dynamo Table Schema

我已經創建了一個基於調查的Android應用程序,現在我有一些表存儲在Amazon Dynamo DB中。

這些表是Employees表,Survey表,Question表和Response表。

Employees表存儲所有員工的信息,調查表包含調查的名稱和已接受調查的員工。

我的問題是與問題表和響應表。這些問題是動態的,基於正在參與調查的員工。

答案表中的答案取決於調查中問題的數量。

我想知道什麼應該是我的@DynamoDBHashKey,@DynamoDBIndexHashKey,@DynamoDBIndexRangeKey在問題和響應表中,以便我可以將問題映射到響應以及兩個表中應該是什麼@DynamoDBAttribute。

用例可以是:公司的員工向公司的所有其他員工發佈了12個問題。

Image was taken earlier, later on I added survey table as well

回答

1

DynamoDB擅長一些事情和壞別人。它在保持低讀/寫延遲的同時大規模地擴展和擴展,但是引入了最終的一致性,並且迫使您提前做出重大的模式決策,比如表中應該包含什麼內容以及數據如何分區以及應該如何分區成爲指標。它要求你通過分區鍵將你的表分成幾部分來採用它的水平縮放模型。

從你說的這個問題的方式來看,很明顯你在關係數據庫中更加舒適。 DynamoDB是而不是是開始學習NoSQL架構(更少)設計的好地方 - 如果它是我的第一個NoSQL數據庫,尤其是試圖建模一個域,例如您所描述的那個域,我會發現它相當無情。它根本不是一個很好的領域建模環境的完全停止 - 其全部關於水平縮放和性能。

如果您在關係數據庫中更舒適,則使用關係數據庫。如果您想嘗試NoSQL,那麼在將您的域建模爲可持續實體時,有必要採用不同的思維模式。例如,您可能在父記錄的模式中包含密切相關的子對象 - 在您的示例中,您可能會將問題作爲調查的子項包含在一起,並將它們存儲在一條記錄中,而不像關係建模中那樣將它們放在單獨的表中。