之前遇到過很多關於主備庫同步更新資料的問題,
一開始是delete或者truncate之後全量插入,但是資料量再大之後,會嚴重影響效率、加重伺服器負擔,甚至導致鎖表,
看到有人說用:
native的sql把兩步合併成乙個sql,如在mysql中:
insert into … on duplicate key update …;
對於oracle,有:
merge into … using … when matched then … when not matched then …
但是這樣對於已經存在但是我又不需要的資料應該怎麼處理呢?
資料同步一般分為兩種方式:全量和增量。
全量,這個很好理解。就是每天定時(避開業務高峰期)或者週期性全量把資料從乙個地方拷貝到另外乙個地方;
全量的話,可以採用直接全部覆蓋(使用「新」資料覆蓋「舊」資料);或者走更新邏輯(覆蓋前判斷下,如果新舊不一致,就更新);
這裡面有乙個隱藏的問題:如果採用非同步寫,主資料物理刪除了,怎麼直接通過全量資料同步?這就需要借助一些中間操作日誌檔案,或者其他手段,把這些「看不到」的資料記錄起來。
增量的基礎是全量,就是你要使用某種方式先把全量資料拷貝過來,然後再採用增量方式同步更新。
增量的話,就是指抓取某個時刻(更新時間)或者檢查點(checkpoint)以後的資料來同步,不是無規律的全量同步。這裡引入乙個關鍵性的前提:副本一端要記錄或者知道(通過查詢更新日誌或者訂閱更新)哪些更新了。
採用更新時間戳、有的採用checkpoint等來標識和記錄更新點。
checkpoint機制還是很靠譜的,但是對於效能消耗還有待深入研究
資料:
一些函式(持續更新)
itertools模組的zip longest對於巢狀list的使用 文章中在變換句子矩陣的時候使用了itertools模組的zip longest函式。使用方法如下 batch list itertools.zip longest batch,fillvalue pad fillvalue就是要填...
latex 一些錯誤(持續更新)
複製貼上的fi字型格式不對,重新鍵盤手敲一下就行。latex winedt報錯 package inputenc error unicode character u fb01 inputenc 人工智慧 shiue gx的部落格 csdn部落格 有些地方打少了花括號,仔細尋找下。error file...
Nodejs 一些細節 (持續更新)
三者的區別是 命令說明 process.cwd 獲得當前執行 node 命令時候的資料夾目錄名 dirname 獲得當前執行檔案所在目錄的完整目錄名 filename 獲得當前執行檔案的帶有完整絕對路徑的檔名 例子說明 假設我們建立乙個全域性的 cli 它的專案路徑在d myproject mycl...