**資料庫的有效性取決於幾個問題:
通常可以調整資料庫的方法如下:
但這篇講的是實作面, 所以我來講一個經驗才對:
這是一個 Data warehouse 的設計, 希望在最低的預算能夠儲至少 10億 筆的歷史資料, 這歷史資料在某方面是種 Log, 但因為可能會有 Rollback 的可能性, Log 也會跟著 Rollback, 且必須不只儲存一份, 計算的時候每次最多只會抓 1 億筆的資料不會全部都抓.
資料來源不只一個, 通常會有 5~10 個 Storage Database 去整到 Data Warehouse, 幸運的事是這個 Table 是有 Increamental Primary Key 來依時間做 Serial 序號, 因此在某方面可以設計各自一套 Dataware House 各自運作, 其流程如下:
這看起來是相當簡單, 因為即使有多個 Data Warehouse, 尤於是每一個 DW 都是獨立運作, 不會有太大的問題, 且加上這個 Primary Key 是數字遞增, 且每一個 DB 都有編號來做 Index, 原本是設想一天在 20~50 萬筆的匯入, 在 SLA 定義只要存半年的情況下, 只要依月做 Rotate 就很足夠了.
但在 99.9% 以上都不會有問題, 但因為這在 Failover 中會有不一致的情型下會做 Mapping, 此時就非常有趣了.
當發生 Fail Over 時, Dispatcher 會跟 DW 說那些資料會有 Reschedule 要重 Mapping 或那些資料要刪除, 此時 Dispatcher 只要跟任何一台 Data Warehouse 說有那些工作, 此時 Data Warehouse 就記錄起來, 然後啟動一隻程式去執行, 問題是 Dispather 無法知道所有的 DW 的存在, 也沒必要, 幸而 DW 知道所有 DW 的存在, 他只要定時去看 Fail Over Log, 然後把自己不存在的 Log 抓回來, 然後照做一次.
上面這個流程我們會發現一點:
上面的實作是靠 Runtime 與 Storage Database 為 Pgsql, 是用 Transaction Log 的方式, 因為量不大不會造成問題, Failover 的資料庫是存在 memcache 的 NOSQL, 用的是 Key Value 的方式達到速率可以很快, Data Warehouse 則是 MySQL, 用的只是一般的 MyISAM Engine, 所以可以存取大量, 但須要兩台來確保安全.
有時我很難想像若這機制不是這樣做, 而是要用一個大型的 Data Warehouse 來做到, 幾乎是不太可能, 即使花上幾百萬也很容易碰到瓶頸, 但上面這樣大約不超過百萬就可以做到, 只是付出的代價就是程式設計師的能力.
雖然最後我們還是會討論 TCO Total Cost of Ownership, 在這例子最大的問題是 SLA 的 ThroughtPut, 其實要達到就很不容易了, 這反而是第一要務.
所以最後我們還是看目標的商業邏輯來決定一個 High Availability 要如何設計.
好深奧,加油喔!!
記得後面加上相關連結,大家會更好找文章.........
這些都是原創的耶....
genehong提到:
這些都是原創的耶....
他的意思是「上一篇」「下一篇」「全系列」
那種超連結
嗯啊,是的,你這好文章,可不能被埋沒呀!!