本來計畫是用logstash來自動同步mysql資料的,奈何配置一直出問題。就只能自己寫**來實現了。
公司業務發展,需要在現有的專案基礎上做es搜尋。那就需要同步現有的資料到es中(現有的資料儲存在mysql上)。
這裡以同步「文章」表的資料舉例。
1 定時任務:專案放在雲伺服器上,contos7.3的系統。可以使用cronteb定時任務來檢測是否有新增資料,進行自動更新操作。
2 es操作:
2.1 新建索引(index)和 對映,對映的結構就是自己想儲存的資料結構。
2.2 用聚合查詢找到當前儲存在es上的最後一篇文章id,再從資料庫查出最後一篇文章id,判斷兩個id是否一樣,資料庫的id大就證明有新資料了。
2.3 有新資料,就用兩個id作為條件,搜尋出新增的文章,批量儲存到es中。
1 單例模式建立es物件
use elasticsearch\clientbuilder;
use think\db;
class quantest
$this->client = clientbuilder::create()->build();
}..............剩餘**自動補
2 新建索引和對映
//建立es索引
public function createartindex()
3 判斷是否有新增的資料
3.1 //判斷是否需要更新文章資料
public function updateartdata()
}3.2 //用聚合查詢搜尋到儲存的最大文章id
public functiongeteslastartid()
3.3 //新增文章資料
public functionaddartdata($begin=0, $end=100)
// var_dump($params);die();
$responses = $this->client->bulk($params);
}4 定時器執行更新操作
***********************************==11月29日補充***********************************===
上文中用id判斷是否有新增資料,只能判斷「新增」的情況,那怎麼實現老的資料更新,也能自動同步到es呢。
這裡可以使用檢查資料更新時間的方法。
mysql表裡必須有乙個類似update_time欄位,用於儲存每次更新操作的時間。在es索引中,也要相應存入這個字段。然後根據兩邊的最大的更新時間來判斷資料是不是一致。不一致,就從資料庫裡搜出來更新的資料,然後更新到es中。
**這裡就不貼上去了。
crontab定時任務
今天工作項有個任務是讓ubuntu定時執行某個指令碼,對postgresql資料庫進行定時備份。linux 系統都有個cron定時任務的機制。今天做些筆記,以便日後翻查。注意 cron機制是有個使用者系統的概念的,即分系統cron和使用者cron,每個使用者所執行的cron任務可能不同。1.以roo...
crontab定時任務
基本格式 command 分 時 日 月 周 命令 第1列表示分鐘1 59 每分鐘用 或者 1表示 第2列表示小時1 23 0表示0點 第3列表示日期1 31 第4列表示月份1 12 第5列標識號星期0 6 0表示星期天 第6列要執行的命令 我的需求是定時備份mongodb 編寫任務執行的指令碼ba...
Crontab定時任務
我們可以使用crontab執行一些週期任務 crontab u user file crontab u user 將file做為crontab的任務列表檔案並載入crontab 編輯crontab檔案內容 顯示crontab檔案內容 刪除載入後的crontab檔案內容 每分鐘向使用者目錄下的log....