需求:每小時同步一次資料,一天最多答十幾萬條。
由於剛進公司不久,小白只會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用php實現,建乙個臨時表,每次同步的資料插入到乙個臨時表中,最後再把臨時表同步到自己的表中,這樣誤差會很小,對於十幾萬左右資料。由於每次同步是乙個表乙個表的插入(時間大概需要3分鐘),當我在同步時,別人使用我的表,導致顯示的資料會存在上乙個小時的資料不當前時間的資料少。更同事討論了一會。有兩種方案:
用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 服務端配...