0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL數(shù)據(jù)如何同步Elasticsearch

數(shù)據(jù)分析與開發(fā) ? 來源:三分惡 ? 2023-03-24 13:44 ? 次閱讀

今天給大家分享一個(gè)電商中常見的場景——MySQL數(shù)據(jù)如何同步Elasticsearch。

商品檢索

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

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

dbbbef2c-c9fc-11ed-bfe3-dac502259ad0.png

MySQL同步ES

1.同步雙寫

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

dbcee3fc-c9fc-11ed-bfe3-dac502259ad0.png

同步雙寫

對于這種方式:

優(yōu)點(diǎn):實(shí)現(xiàn)簡單

缺點(diǎn):

業(yè)務(wù)耦合,商品的管理中耦合大量數(shù)據(jù)同步代碼

影響性能,寫入兩個(gè)存儲,響應(yīng)時(shí)間變長

不便擴(kuò)展:搜索可能有一些個(gè)性化需求,需要對數(shù)據(jù)進(jìn)行聚合,這種方式不便實(shí)現(xiàn)

2.異步雙寫

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

dbe1035c-c9fc-11ed-bfe3-dac502259ad0.png

異步雙寫

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

dbf10a4a-c9fc-11ed-bfe3-dac502259ad0.png

多維度多條件查詢

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

dc294ea0-c9fc-11ed-bfe3-dac502259ad0.png

回查完成聚合

這種方式:

優(yōu)點(diǎn):

解耦合,商品服務(wù)無需關(guān)注數(shù)據(jù)同步

實(shí)時(shí)性較好,使用MQ,正常情況下,同步完成在秒級

缺點(diǎn):

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

3.定時(shí)任務(wù)

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

dc3c8eb6-c9fc-11ed-bfe3-dac502259ad0.png

定時(shí)任務(wù)

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

這種方式:

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

缺點(diǎn):

實(shí)時(shí)性難以保證

對存儲壓力較大

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

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

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

dc4cad78-c9fc-11ed-bfe3-dac502259ad0.png

MySQL主從同步

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

dc61bd1c-c9fc-11ed-bfe3-dac502259ad0.png

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

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

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

dc75472e-c9fc-11ed-bfe3-dac502259ad0.png

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

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

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

優(yōu)點(diǎn):

業(yè)務(wù)入侵較少

實(shí)時(shí)性較好

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

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

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






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 適配器
    +關(guān)注

    關(guān)注

    8

    文章

    1914

    瀏覽量

    67850
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    797

    瀏覽量

    26399
  • MYSQL數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    9375

原文標(biāo)題:MySQL數(shù)據(jù)同步ES的4種解決方案!

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何將MS訪問數(shù)據(jù)轉(zhuǎn)換為MySQL

    借助dbForgeStudio for MySQL,您可以輕松地將數(shù)據(jù)從MicrosoftAccess遷移到MySQL,并保持數(shù)據(jù)和功能的完整性。這個(gè)過程將允許您利用更具可伸縮性和功能
    的頭像 發(fā)表于 01-23 13:47 ?395次閱讀
    如何將MS訪問<b class='flag-5'>數(shù)據(jù)</b>轉(zhuǎn)換為<b class='flag-5'>MySQL</b>

    mysql怎么新建一個(gè)數(shù)據(jù)

    mysql怎么新建一個(gè)數(shù)據(jù)庫 如何新建一個(gè)數(shù)據(jù)庫在MySQL中 創(chuàng)建一個(gè)數(shù)據(jù)庫是MySQL中的基
    的頭像 發(fā)表于 12-28 10:01 ?836次閱讀

    mysql密碼忘了怎么重置

    mysql密碼忘了怎么重置? MySQL是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),密碼用于保護(hù)數(shù)據(jù)庫的安全性和保密性。如果你忘記了MySQL的密碼,
    的頭像 發(fā)表于 12-27 16:51 ?5987次閱讀

    數(shù)據(jù)數(shù)據(jù)恢復(fù)—未開啟binlog的Mysql數(shù)據(jù)數(shù)據(jù)恢復(fù)案例

    mysql數(shù)據(jù)數(shù)據(jù)恢復(fù)環(huán)境: 本地服務(wù)器,windows server操作系統(tǒng) ,部署有mysql單實(shí)例,數(shù)據(jù)庫引擎類型為innodb,
    的頭像 發(fā)表于 12-08 14:18 ?1055次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>庫<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—未開啟binlog的<b class='flag-5'>Mysql</b><b class='flag-5'>數(shù)據(jù)</b>庫<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    eclipse怎么連接數(shù)據(jù)mysql

    連接Eclipse和MySQL數(shù)據(jù)庫可以通過JDBC(Java Database Connectivity)來實(shí)現(xiàn)。以下是詳細(xì)步驟: 下載并安裝MySQL數(shù)據(jù)庫:你首先需要下載并安裝
    的頭像 發(fā)表于 12-06 11:06 ?1172次閱讀

    MySQL數(shù)據(jù)庫的url地址

    MySQL數(shù)據(jù)庫的URL地址是用于連接到MySQL服務(wù)器的地址。URL是一種統(tǒng)一資源定位符,用于指定特定資源的位置和訪問方式。MySQL數(shù)據(jù)
    的頭像 發(fā)表于 12-06 10:58 ?2488次閱讀

    mysql數(shù)據(jù)庫基礎(chǔ)命令

    MySQL是一個(gè)流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),經(jīng)常用于存儲、管理和操作數(shù)據(jù)。在本文中,我們將詳細(xì)介紹MySQL的基礎(chǔ)命令,并提供與每個(gè)命令相關(guān)的詳細(xì)解釋。 登錄
    的頭像 發(fā)表于 12-06 10:56 ?530次閱讀

    MySQL數(shù)據(jù)遷移和同步的工具詳解。#數(shù)據(jù)庫 #MySQL #數(shù)據(jù)遷移 #同步工具

    數(shù)據(jù)MySQL
    數(shù)據(jù)庫小組
    發(fā)布于 :2023年11月24日 14:19:52

    mysql數(shù)據(jù)庫備份與還原

    MySQL是一種常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),用于存儲和管理數(shù)據(jù)。備份和還原數(shù)據(jù)庫是非常重要的操作,可以保護(hù)數(shù)據(jù)免受丟失或損壞的影響。本文將詳
    的頭像 發(fā)表于 11-23 14:32 ?1121次閱讀

    MySQL數(shù)據(jù)庫基礎(chǔ)知識

    MySQL 是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它是目前最流行的數(shù)據(jù)庫之一。MySQL 提供了一種結(jié)構(gòu)化的方法來管理大量的數(shù)據(jù),并且具有高效、
    的頭像 發(fā)表于 11-21 11:09 ?926次閱讀

    mysql和sql server區(qū)別

    MySQL和SQL Server是兩種常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),用于存儲和管理數(shù)據(jù)庫。雖然它們都支持SQL語言,但在其他方面存在一些顯著的區(qū)別。以下是MySQL和SQL
    的頭像 發(fā)表于 11-21 11:07 ?1451次閱讀

    MySQL導(dǎo)出的步驟

    MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),用于存儲和管理大量的結(jié)構(gòu)化數(shù)據(jù)。在實(shí)際應(yīng)用中,我們經(jīng)常需要將MySQL數(shù)據(jù)庫中的
    的頭像 發(fā)表于 11-21 10:58 ?739次閱讀

    介紹4種常用的MySQL同步ES方案

    在實(shí)際項(xiàng)目開發(fā)中,我們經(jīng)常將 MySQL 作為業(yè)務(wù)數(shù)據(jù)庫,ES 作為查詢數(shù)據(jù)庫,用來實(shí)現(xiàn)讀寫分離,緩解 MySQL 數(shù)據(jù)庫的查詢壓力,應(yīng)對海
    的頭像 發(fā)表于 11-20 10:45 ?647次閱讀
    介紹4種常用的<b class='flag-5'>MySQL</b><b class='flag-5'>同步</b>ES方案

    數(shù)據(jù)mysql基本增刪改查

    MySQL是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),常用于Web應(yīng)用程序的數(shù)據(jù)存儲和管理。通過使用MySQL,用戶可以進(jìn)行數(shù)據(jù)的增刪改查操作,從而實(shí)
    的頭像 發(fā)表于 11-16 16:35 ?1433次閱讀

    mysql是一個(gè)什么類型的數(shù)據(jù)

    MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),用于存儲和管理大量結(jié)構(gòu)化數(shù)據(jù)。它被廣泛用于各種應(yīng)用程序和網(wǎng)站的后端,包括電子商務(wù)平臺、社交媒體網(wǎng)站、金融系統(tǒng)等等。MySQL的特點(diǎn)是
    的頭像 發(fā)表于 11-16 14:43 ?1646次閱讀