如何為分佈式表建模本地異常
我正在尋找可能的方法來為分佈式表建模並為該表提供本地異常。考慮這樣一種情況,總部發布分發給分支機構的產品/價格列表,並且他們將該價格列表載入到其本地數據庫中。現在有時這些分支機構想要將總部價格更改為當地價格。顯然,我們可以簡單地更新本地數據庫中的價格,但是當應用下一次總部更新時它會失去。我們也只想阻止單個列,而不是更改行中的其他欄位。
例如。總公司送
| Name | Price | |------|-------| | ABC | $5 | | DEF | $8 |
在一個數據庫中(比如說 100 個),我們希望 ABC 的價格為 $ 3. And this $ 即使收到來自總部的未來更新,3 仍應繼續適用。總部不知道這個本地異常。
過去我們通過兩種方式做到這一點。第一個是維護第二個 LocalProducts 表,其中包含要應用的更改 - 然後在應用總部版本時,將從 LocalProducts 讀取任何本地更改並替換分發的值。這工作正常,但隨著表大小的增加而受到影響。
我們嘗試的第二種方法是複制列並使用合併,例如,而不是
select price where name='abc'
我們將使用select coalesce(localprice,price) where name='abc'
這工作正常,但有成本,我們必須更改每個 SQL 並記住在未來的開發中也要這樣做。還有其他更好的方法嗎?我正在尋找與數據庫無關的解決方案,目標數據庫是 ODBC(90% sql/server)、SQL-Lite 或 MS-Access。如果有幫助,可以忽略訪問,它正在被積極淘汰。引擎特定的解決方案是可以的,我們可以檢測引擎並使用不同的技術,但不希望每個引擎都有不同的技術。
其他注意事項
- 數據由應用程序分發,而不是內置複製。這意味著我們可以在載入階段擁有程式碼/邏輯
- 多個表都需要此功能,而不僅僅是上面的範例
- 一些表具有可能涉及的合理數量的列,但通常不會。
- 大多數表都不大,最大的可能有 50M 行,最小的情況下只有 7 行。
(請隨時重新標記這個問題 - 不完全確定哪些標籤是相關的。是的,多年來我已經花了很多時間調查這個問題)
將 COALESCE 放在視圖中,針對視圖而不是基表編寫查詢。如果您可以刪除對這些表的訪問權限並僅授予對視圖的訪問權限,那將會有所幫助。
由於必須讀取兩個表,因此會有一個小的執行時間損失。如果您可以更改負載以在載入時執行一次 COALESCE,那就更好了。對本地價格的後續更改必須同時寫入本地表和主列表。由於官方價格未知,因此不可能就當地定價的成本進行報告。