ElasticSearch的資料同步問題怎麼處理?

2021-10-09 05:40:13 字數 1295 閱讀 5953

概述:最簡單的一種,在將資料寫到mysql時,同時將資料寫到es,實現資料的雙寫。

優點:業務邏輯簡單。

缺點

硬編碼(es的編碼);

業務耦合性高;

效能較差(mysql+es會降低系統效能);

存在雙寫失敗丟資料風險(如果資料有強一致性的要求,那就必須加上事務,效能又會降低)

(es系統不可用、應用系統和es之間的網路故障、應用系統重啟,導致系統來不及寫入es等);

概述:針對第一種同步雙寫的效能和資料丟失問題,可以考慮引入mq。(引入mq比直接引入es效率高)

優點:效能高;不存在丟資料問題。

缺點

硬編碼(mq的編碼);

業務耦合性高;

可能存在時延問題(mq的消費可能由於網路或其它原因導致使用者寫入的資料不一定可以馬上看到,造成延時);

概述:上面兩種方案中都存在硬編碼問題,要麼植入es**,要麼替換為mq**。如果對實時性要求不高的情況下,可以考慮用定時器來處理。

資料庫的相關表中增加乙個欄位為 timestamp 的字段,任何crud操作都會導致該字段的時間發生變化,讓該程式按一定的時間週期掃瞄指定的表,把該時間段內發生變化的資料提取出來;逐條寫入到es中。

優點

不改變原來**,沒有侵入性、沒有硬編碼;

沒有業務耦合;

缺點

時效性較差(由於定時器工作週期不可能設在秒級);

對資料庫有一定的輪詢壓力(改進方法是將輪詢放到壓力不大的重庫上);

概述:上面三種方案要麼有**侵入,要麼有硬編碼,要麼有時延,那麼可以利用mysql的binlog來進行同步。

具體步驟如下

1)讀取mysql的binlog日誌,獲取指定表的日誌資訊;

2)將讀取的資訊轉為mq;

3)編寫乙個mq消費程式;

4)不斷消費mq,每消費完一條訊息,將訊息寫入到es中;

優點

沒有**侵入、沒有硬編碼;

沒有業務耦合;

缺點

構建binlog系統複雜;

可能存在時延問題(mq的消費可能由於網路或其它原因導致使用者寫入的資料不一定可以馬上看到,造成延時);

elasticsearch 同步myql 資料

專案 elastic 搜尋資料庫內容,達到快速匹配的效果 elasticsearch 上面是官方鏈結,我也對它不做過多介紹,有興趣的小夥伴可以直接跳轉。目前我們是通過elastic node的api呼叫它的 直接npm install s elasticsearch 同步mysql的手段 logst...

Elasticsearch與Mysql資料同步

elasticsearch就是專門用於搜尋的,所以我們會將新增的資料放入elasticsearch中用於搜尋,就有這樣的常見的場景,需要將mysql中的資料同步到elasticsearch中。mysql資料同步到es型別 mysql資料同步到es中分為兩種,分別是全量同步和增量同步。全量同步表示第一...

ElasticSearch怎樣加入,檢索資料

elasticsearch是乙個分布式的文件 document 儲存引擎。它能夠實時儲存並檢索複雜資料結構 序列化的json文件。換言說,一旦文件被儲存在elasticsearch中,它就能夠在集群的任一節點上被檢索。當然,我們不僅須要儲存資料。還要高速的批量查詢。儘管已經有非常多nosql的解決方...