2017-07-27 148 views
0

我想在發電機數據庫中存儲交易歷史。有兩種建議的方法。發電機數據庫中的交易歷史數據建模

方法1:交易價 - >分區鍵& GSI [CardNumber,TransactionDate]

方法2: CardNumber - >分區鍵,交易價 - >範圍鍵& LSI [CardNumber,TransactionDate]

我決定去第一個,因爲我想避免熱分區。

任何人都可以建議更好的方法或指向正確的方向。

+0

在方法2中,爲什麼要定義LSI?按交易日期您是否有任何分揀要求?還請提及您將如何訪問大多數用例的數據?即通過交易參考或卡號? – notionquest

+0

數據將通過卡號和日期範圍進行訪問。 – cody123

回答

0

我建議去方法2稍作修改

  • CardNumber - >分區鍵
  • TransactionDate - >排序鍵(我想你可以存儲事務 timestamp而不僅僅是日期)
  • 交易參考 - >創建GSI如果需要的話(即如果有基於僅供參考)

任何理由的情況下使用,以獲得數據: -

數據模型應該滿足主要用例或查詢訪問模式。在您的方法1中,您最終會將GSI用於主要用例,這不是設計數據模型的最佳實踐。我們可以將GSI用於任何替代或邊緣情況。

正常情況下,應立即同步GSI。但是,在一些罕見的情況下,可能會有一些小的延遲。此外,您應該考慮是否要使用最終一致或一致的讀取。

如果你可以避免GSI,你也可以節省成本。

+0

交易日期不能排序,因爲它可能同時獲得多筆交易。當有人發送信用證退款並且您正在同時進行交易時],但是創建分區密鑰時,卡號不會受到「熱分區」的影響? http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html – cody123