ElasticStack系列之十一 & 同步 mysql 資料的實踐與思考

來源:互聯網
上載者:User

標籤:流程   操作   思考   mtime   str   標誌位   stat   更新   方式   

問題

  1. jdbc-input-plugin 只能實現資料庫的追加,對於 elasticsearch 增量寫入,但經常 jdbc 源一端的資料庫可能會做資料庫刪除或者更新操作。這樣一來資料庫與搜尋引擎的資料庫就出現了不對稱的情況。當然你如果有Team Dev可以寫程式在刪除或者更新的時候同步對搜尋引擎操作。如果你沒有這個能力,可以嘗試我下面要說的方法。

  2. 當然網上後續又出現了 go-mysql-elasticsearch 項目,同步 binlog 的方式實現,這種方式是可以解決 1 中的問題,但是由於 Elasticsearch 版本的升級迭代以及紛繁複雜的映射類型,導致該項目無法及時的滿足我們應用情境,故一定程度上還是需要我們自己來開發一套新的流程來完全滿足我們的需要。

解決辦法

  在資料庫中增加一個更新時間欄位以及是否刪除標誌位,例如:

  我這裡有一個資料表 article , mtime 欄位定義了 ON UPDATE CURRENT_TIMESTAMP 所以每次更新 mtime 的時間都會變化,status 欄位用於表徵是否刪除,預設為沒有刪除,具體如下:

  

  logstash 增加 mtime 的查詢規則

  

  至此,可以分出兩種解決方案:

  第一種:直接通過應用程式定時的讀取 mysql 表,通過 mtime 和 status 欄位來確定 Elasticsearch 是 更新(新增) 還是 刪除,之後拼接對應的 bulkRequest 請求直接發送給 Elasticsearch 服務端。

  第二種:通過 logstash 來代替我們自己編寫的應用程式,定時的掃描 mysql 表資料,再將資料同步到 Elasticsearch 服務端。

  

ElasticStack系列之十一 & 同步 mysql 資料的實踐與思考

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.