亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL數(shù)據(jù)同步Elasticsearch的4種方案

 更新時間:2023年03月20日 10:57:56   作者:Java_LingFeng  
本文主要介紹了MySQL數(shù)據(jù)同步Elasticsearch的4種方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

今天給大家介紹一個電商中常見的場景 —— MySQL 數(shù)據(jù)同步 Elasticsearch。

商品檢索

大家應(yīng)該都在各種電商網(wǎng)站檢索過商品,檢索商品一般都是通過什么實現(xiàn)呢?搜索引擎Elasticsearch。

那么問題來了,商品上架,數(shù)據(jù)一般寫入到MySQL的數(shù)據(jù)庫中,那么用于檢索的數(shù)據(jù)又是怎么同步到Elasticsearch的呢?

MySQL同步ES

1.同步雙寫

這是能想到的最直接的方式,在寫入MySQL,直接也同步往ES里寫一份數(shù)據(jù)。

同步雙寫

對于這種方式:

優(yōu)點:實現(xiàn)簡單

缺點:

  • 業(yè)務(wù)耦合,商品的管理中耦合大量數(shù)據(jù)同步代碼
  • 影響性能,寫入兩個存儲,響應(yīng)時間變長
  • 不便擴展:搜索可能有一些個性化需求,需要對數(shù)據(jù)進行聚合,這種方式不便實現(xiàn)

2.異步雙寫

我們也很容易想到異步雙寫的辦法,上架商品的時候,先把商品數(shù)據(jù)丟進MQ,為了解耦合,我們一般會拆分一個搜索服務(wù),由搜索服務(wù)去訂閱商品變動的消息,來完成同步。

異步雙寫

前面說的,一些數(shù)據(jù)需要聚合處理成類似寬表的結(jié)構(gòu)怎么辦呢?例如商品庫的商品品類、spu、sku表是分開的,但是查詢是跨維度的,在ES里再聚合一次效率就低一些,最好就是把商品的數(shù)據(jù)給聚合起來,在ES里以類似大寬表的形式存儲,這樣一來查詢效率就高一些。

多維度多條件查詢

這種其實沒什么好辦法,基本上還是得搜索服務(wù)直接查庫,或者遠程調(diào)用,再查詢一遍商品的數(shù)據(jù)庫,就是所謂的回查。

回查完成聚合

這種方式:

優(yōu)點:

  • 解耦合,商品服務(wù)無需關(guān)注數(shù)據(jù)同步
  • 實時性較好,使用MQ,正常情況下,同步完成在秒級

缺點:

  • 引入了新的組件和服務(wù),增加了復雜度

3.定時任務(wù)

假如我們要快速搞搞,數(shù)據(jù)量有沒那么大,怎么辦呢?定時任務(wù)也可以。

定時任務(wù)

定時任務(wù),最麻煩的一點是頻率不好選,頻率高的話,會非自然地形成業(yè)務(wù)的波峰,導致存儲的CPU、內(nèi)存占用波峰式上升,頻率低的話實時性比較差,而且也有波峰的情況。

這種方式:

優(yōu)點:實現(xiàn)比較簡單

缺點:

  • 實時性難以保證
  • 對存儲壓力較大

4.數(shù)據(jù)訂閱

還有一種方式,就是最時興的數(shù)據(jù)訂閱。

MySQL通過binlog訂閱實現(xiàn)主從同步,各路數(shù)據(jù)訂閱框架比如canal就依據(jù)這個原理,將client組件偽裝成從庫,來實現(xiàn)數(shù)據(jù)訂閱。

MySQL主從同步

我們以應(yīng)用最廣泛的canal為例,canal通過canal-adapter,支持多種適配器,其中就有ES適配器,通過一些配置,啟動之后,就可以直接把MySQL數(shù)據(jù)同步到ES,這個過程是零代碼的。

canal同步數(shù)據(jù)

但是,和老板了解過,使用canal看起來很美好,幫我們把同步的事情都干了,但其實,還是要寫代碼。為什么呢?

前面提到的多張表數(shù)據(jù)聚合,canal的支持沒那么好,所以還是得回查。這時候用canal-adapter就不合適了,需要自己實現(xiàn)canal-client,監(jiān)聽和聚合數(shù)據(jù),寫入ES:

數(shù)據(jù)訂閱+回查

這種看起來和異步雙寫比較像,但是第一降低了商品服務(wù)的耦合,第二數(shù)據(jù)的實時性更好。

所以使用數(shù)據(jù)訂閱:

優(yōu)點:

  • 業(yè)務(wù)入侵較少
  • 實時性較好

至于數(shù)據(jù)訂閱框架的選型,主流的大體上是這些:

CancalMaxwellPython-Mysql-Rplication
開源方阿里巴巴Zendesk社區(qū)
開發(fā)語言JavaJavaPython
活躍度活躍活躍活躍
高可用支持支持不支持
客戶端Java/Go/PHP/Python/RustPython
消息落地Kafka/RocketMQ 等Kafka/RabbitNQ/Redis 等自定義
消息格式自定義JSON自定義
文檔詳略詳細詳細詳細
Boostrap不支持支持不支持

除了MySQL同步ES,MySQL同步到其它的數(shù)據(jù)存儲,例如HBase,其實大體上都是類似的幾種方法。

到此這篇關(guān)于MySQL數(shù)據(jù)同步Elasticsearch的4種方案的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)同步Elasticsearch內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C3P0連接池+MySQL的配置及wait_timeout問題的解決方法

    C3P0連接池+MySQL的配置及wait_timeout問題的解決方法

    這篇文章主要介紹了C3P0連接池+MySQL的配置及wait_timeout問題的解決方法,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • mysql數(shù)據(jù)庫語句優(yōu)化過程

    mysql數(shù)據(jù)庫語句優(yōu)化過程

    這篇文章主要介紹了mysql數(shù)據(jù)庫語句優(yōu)化過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • mysql之查找所有數(shù)據(jù)庫中沒有主鍵的表問題

    mysql之查找所有數(shù)據(jù)庫中沒有主鍵的表問題

    這篇文章主要介紹了mysql之查找所有數(shù)據(jù)庫中沒有主鍵的表問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • mysql Event Scheduler: Failed to open table mysql.event

    mysql Event Scheduler: Failed to open table mysql.event

    這篇文章主要介紹了mysql Event Scheduler: Failed to open table mysql.event,需要的朋友可以參考下
    2016-04-04
  • MySQL修改時區(qū)的方法小結(jié)

    MySQL修改時區(qū)的方法小結(jié)

    這篇文章主要介紹了MySQL修改時區(qū)的方法,總結(jié)分析了三種常見的MySQL時區(qū)修改技巧,包括命令行模式、配置文件方式及代碼方式,需要的朋友可以參考下
    2016-05-05
  • MySQL8.0.20單機多實例部署步驟

    MySQL8.0.20單機多實例部署步驟

    本文主要介紹了MySQL8.0.20單機多實例部署步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Mysql和redis緩存不一致問題的解決方案

    Mysql和redis緩存不一致問題的解決方案

    在高并發(fā)的情況下,如果所有的數(shù)據(jù)都從數(shù)據(jù)庫中去讀取,那再強大的數(shù)據(jù)庫系統(tǒng)都承受不了這個壓力,因此我們會將部分數(shù)據(jù)放入緩存中,比如放入redis中,這篇文章主要給大家介紹了關(guān)于Mysql和redis緩存不一致問題的解決方案,需要的朋友可以參考下
    2022-08-08
  • mysql創(chuàng)建刪除表的實例詳解

    mysql創(chuàng)建刪除表的實例詳解

    這篇文章主要介紹了mysql創(chuàng)建刪除表的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-10-10
  • JDBC鏈接MySQL8的注意事項及說明

    JDBC鏈接MySQL8的注意事項及說明

    這篇文章主要介紹了JDBC鏈接MySQL8的注意事項及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • mysql數(shù)據(jù)庫如何求時間差

    mysql數(shù)據(jù)庫如何求時間差

    這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫如何求時間差的相關(guān)資料,MySQL提供了許多用于計算時間差的函數(shù),可以方便地計算兩個時間之間的時間差、取出時間段中的時間間隔等,需要的朋友可以參考下
    2023-08-08

最新評論