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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

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

商品檢索

大家應該都在各種電商網(wǎng)站檢索過商品,檢索商品一般都是通過什么實現(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)點:實現(xiàn)簡單

缺點:

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

影響性能,寫入兩個存儲,響應時間變長

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

2.異步雙寫

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

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

異步雙寫

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

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

多維度多條件查詢

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

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

回查完成聚合

這種方式:

優(yōu)點:

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

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

缺點:

引入了新的組件和服務,增加了復雜度

3.定時任務

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

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

定時任務

定時任務,最麻煩的一點是頻率不好選,頻率高的話,會非自然地形成業(yè)務的波峰,導致存儲的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ù)訂閱。

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

MySQL主從同步

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

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

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

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

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

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

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

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

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

優(yōu)點:

業(yè)務入侵較少

實時性較好

至于數(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 自定義
文檔詳略 詳細 詳細 詳細
Boostrap 不支持 支持 不支持

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






審核編輯:劉清

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

    關注

    8

    文章

    1956

    瀏覽量

    68045
  • MySQL
    +關注

    關注

    1

    文章

    813

    瀏覽量

    26599
  • MYSQL數(shù)據(jù)庫

    關注

    0

    文章

    96

    瀏覽量

    9394

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

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

收藏 人收藏

    評論

    相關推薦

    數(shù)據(jù)數(shù)據(jù)恢復—Mysql數(shù)據(jù)庫表記錄丟失的數(shù)據(jù)恢復流程

    Mysql數(shù)據(jù)庫故障: Mysql數(shù)據(jù)庫表記錄丟失。 Mysql數(shù)據(jù)庫故障表現(xiàn): 1、
    的頭像 發(fā)表于 12-16 11:05 ?168次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>庫<b class='flag-5'>數(shù)據(jù)</b>恢復—<b class='flag-5'>Mysql</b><b class='flag-5'>數(shù)據(jù)</b>庫表記錄丟失的<b class='flag-5'>數(shù)據(jù)</b>恢復流程

    數(shù)據(jù)數(shù)據(jù)恢復—MYSQL數(shù)據(jù)庫ibdata1文件損壞的數(shù)據(jù)恢復案例

    mysql數(shù)據(jù)庫故障: mysql數(shù)據(jù)庫文件ibdata1、MYI、MYD損壞。 故障表現(xiàn):1、數(shù)據(jù)庫無法進行查詢等操作;2、使用my
    的頭像 發(fā)表于 12-09 11:05 ?158次閱讀

    MySQL還能跟上PostgreSQL的步伐嗎

    Can MySQL Catch Up with PostgreSQL’s Momentum?[2] 譯者:馮若航[3],Vonng,Pigsty[4]?作者,PostgreSQL 大法師,數(shù)據(jù)庫老司機,云計算泥石流。 MySQL
    的頭像 發(fā)表于 11-18 10:16 ?221次閱讀
    <b class='flag-5'>MySQL</b>還能跟上PostgreSQL的步伐嗎

    香港云服務器怎么部署MySQL數(shù)據(jù)庫?

    在香港云服務器上部署MySQL數(shù)據(jù)庫的步驟如下: 步驟 1: 更新軟件包列表 首先,確保軟件包列表是最新的。在終端中執(zhí)行以下命令: sudo apt update 步驟 2: 安裝 MySQL
    的頭像 發(fā)表于 11-14 16:15 ?181次閱讀

    Elasticsearch 再次開源

    Elasticsearch 和 Kibana 又可以被稱為開源了。很難表達這句話讓我有多高興。我激動得簡直要跳起來了。我們 Elastic 的所有人都是如此。開源是我的 DNA。這也是Elastic的DNA。能夠再次將 Elasticsearch 稱為開源,我感到非常高興
    的頭像 發(fā)表于 11-13 12:14 ?139次閱讀
    <b class='flag-5'>Elasticsearch</b> 再次開源

    MySQL編碼機制原理

    MyQL 編解碼機制介紹 問題解答 讀者問題簡介 為敘述方便,以下的「我」指代讀者 我們知道在 Java 中是通過 ?JDBC 來訪問數(shù)據(jù)庫的,以訪問 MySQL 為例,需要配置以下 url 才能訪問
    的頭像 發(fā)表于 11-09 11:01 ?248次閱讀

    適用于MySQL的dbForge架構(gòu)比較

    dbForge Schema Compare for MySQL 是一種工具,用于輕松有效地比較和部署 MySQL 數(shù)據(jù)庫結(jié)構(gòu)和腳本文件夾差異。該工具提供了 MySQL
    的頭像 發(fā)表于 10-28 09:41 ?214次閱讀
    適用于<b class='flag-5'>MySQL</b>的dbForge架構(gòu)比較

    全量+增量秒級更新!NineData輕松完成MySQL同步到StarRocks #數(shù)據(jù)庫#MySQL

    MYSQL數(shù)據(jù)
    數(shù)據(jù)庫小組
    發(fā)布于 :2024年08月09日 14:58:43

    華納云:如何修改MySQL的默認端口

    MySQL是世界上最流行的開源關系型數(shù)據(jù)庫管理系統(tǒng)之一。在某些情況下,由于安全性、網(wǎng)絡策略或端口沖突的原因,數(shù)據(jù)庫管理員可能需要更改MySQL服務的默認監(jiān)聽端口。本文將指導您如何在不同
    的頭像 發(fā)表于 07-22 14:56 ?319次閱讀
    華納云:如何修改<b class='flag-5'>MySQL</b>的默認端口

    MySQL的整體邏輯架構(gòu)

    支持多種存儲引擎是眾所周知的MySQL特性,也是MySQL架構(gòu)的關鍵優(yōu)勢之一。如果能夠理解MySQL Server與存儲引擎之間是怎樣通過API交互的,將大大有利于理解MySQL的核心
    的頭像 發(fā)表于 04-30 11:14 ?455次閱讀
    <b class='flag-5'>MySQL</b>的整體邏輯架構(gòu)

    MySQL忘記root密碼解決方案

    mysql登錄密碼為password()算法加密,解密成本太高,以下為通用方案; 原理:mysql提供了特殊啟動方式,即跳過權限表驗證,啟動后,登錄不需要提供密碼; 登錄后,即可修改mysql
    的頭像 發(fā)表于 04-23 16:08 ?716次閱讀

    Redis與MySQL協(xié)同升級企業(yè)緩存

    傳統(tǒng)的MySQL數(shù)據(jù)庫在處理大規(guī)模應用時已經(jīng)到了瓶頸,RedisEnterprise怎樣助力突破這一瓶頸?RedisEnterprise與MYSQL共同用作企業(yè)級緩存或副本數(shù)據(jù)庫,會產(chǎn)
    的頭像 發(fā)表于 02-19 13:18 ?379次閱讀
    Redis與<b class='flag-5'>MySQL</b>協(xié)同升級企業(yè)緩存

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

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

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例!

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例! MySQL是一種常用的關系型數(shù)據(jù)庫管理系統(tǒng),如果你忘記了MySQL的密
    的頭像 發(fā)表于 01-12 16:06 ?759次閱讀

    怎么簡單實現(xiàn)由Labview讀取的串口數(shù)據(jù)自增寫入mysql5.7數(shù)據(jù)庫中?

    怎么簡單實現(xiàn)由Labview讀取的串口數(shù)據(jù)自增寫入mysql5.7數(shù)據(jù)庫中? 已實現(xiàn):串口數(shù)據(jù)的接收處理 mysql5.7的安裝(已測試
    發(fā)表于 01-11 22:05