實時同步資料優化

2021-08-11 14:21:01 字數 1648 閱讀 5013

需求:每小時同步一次資料,一天最多答十幾萬條。

由於剛進公司不久,小白只會php,所以第一時間會考慮用php實現,每次都是先truncate table 在插入表。

php初次實現

獲取所有的表名

根據表名獲取資料

一條一條插入資料(一條一條)

下面是獲取所有的資料後進行插入

//插入乙個資料庫的資料道 gamedata資料庫

foreach ($datain as $k

=>

$data)

}

第二次 php優化

每天上班第一件事,看程序有沒有掛,果然掛了,經測試原來是記憶體不足所導致的。因此不能一次性插入所有的資料,想到自己每次同步的時間有點長,所以插入資料分為四次插入(注意分四次 因為有四個庫),同事吧記憶體設定大點,這樣效能已改要好點。

$return_data = ;

foreach ($table1

as$table)

}$insert_sql = '';

$num = 0;

$time = date("y-m-d h:i:s");

if (!empty($return_data)) }}

$insert_sql = rtrim($insert_sql, ',');

$this->db_sync->query($insert_sql_start . $insert_sql);

error_log(date("y-m-d h:i:s") . print_r('insert sql1 ' . $num . "\n", true), 3, '/tmp/userchannellog');

}

第三次優化 使用shell

由於每次同步是乙個表乙個表的插入(時間大概需要3分鐘),當我在同步時,別人使用我的表,導致顯示的資料會存在上乙個小時的資料不當前時間的資料少。更同事討論了一會。有兩種方案:

用php實現,建乙個臨時表,每次同步的資料插入到乙個臨時表中,最後再把臨時表同步到自己的表中,這樣誤差會很小,對於十幾萬左右資料。

用shell指令碼,因此在這裡就不用擔心記憶體問題。把所有資料同步到乙個檔案裡,最終直接匯入。這樣誤差也會很小,對於十幾萬左右數。

到這裡我對以上者兩種方法執行效率有了興趣。當然我最終選擇用shell指令碼實現。

10萬條資料對比:

120萬條資料執行對比如下:

今天終於寫完自己的部落格了。在這實習期間總是覺得時間不夠用。

rsync inotify實時資料同步

沒有實際的用過,先mark一下,後面實踐。一 為什麼要用rsync sersync架構?1 sersync是基於inotify開發的,類似於inotify tools的工具 2 sersync可以記錄下被監聽目錄中發生變化的 包括增加 刪除 修改 具體某乙個檔案或某乙個目錄的名字,然後使用rsync...

inotifywait rsync 實時同步指令碼

相同伺服器我們時常需要相同的部署,這時就需要我們能夠實時的同步檔案。今天我就和大家分享乙個能夠實現自動遠端實時同步檔案的方法 一 利用inotifywait對檔案系統事件實時監控,觸發事件呼叫rsync遠端同步檔案至一台或多台伺服器 接下來說說我們需要使用到的工具 1 rsync 乙個遠端資料同步工...

rsync inotify實時同步

inotify是一種強大的 細粒度的 非同步的檔案系統事件監控機制,linux核心從2.6.13起,加入了inotify支援,通過inotify可以監控檔案系統中新增 刪除,修改 移動等各種細微事件 資源準備 兩台centos7.2機器 一台rsync服務端 192.168.180.234 服務端配...