Database-Design

“許多數據庫寫入”是一種反模式嗎?

  • July 3, 2020

我正在設計一個數據庫api。我有兩個選擇:

  1. 有一個複雜的聚合,可以根據需要查詢數據,或者,
  2. 創建一個物化視圖,以一種易於查詢的方式記錄所有數據更改,並可能使查詢此數據比從選項 1 中查詢數據更快。

我想知道在數據庫設計和管理中有很多寫反模式嗎?因為如果不是,我很樂意使用選項 2。

我使用的是非 SQL 數據庫;MongoDB。

沒有免費的午餐。如果有工作要做,它必須在某個時候完成。問題是系統作為一個整體執行工作的最佳時間是什麼時候。這取決於總工作量和訪問模式。

對於大多數寫入/很少讀取的模式,例如日誌,優化寫入吞吐量是有意義的。由於大多數數據從未被讀取,因此執行額外的處理以優化可能永遠不會發生的未來讀取將是一種資源浪費。

對於一次寫入/多次讀取的模式,例如電子商務,在寫入時完成額外的工作而不是在每次讀取時冗餘地執行它是有意義的。

這兩個極端之間有很多層次。也許初始寫入對延遲敏感?將請求排入隊列以非同步執行附加處理可能會更好。等等。

請注意,重複值(並且聚合確實重複數據)會帶來風險。在寫入的詳細行和更新的聚合之間會有有限的延遲。其他程序可能對此敏感並報告不一致的結果。根據定義,聚合可能會成為並發瓶頸,因為它們可能涉及許多活動。曾經針對任一源編寫的每個程序也必須考慮其他值的存在。

引用自:https://dba.stackexchange.com/questions/270233