99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(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,為了解耦合,我們一般會拆分一個(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)是頻率不好選,頻率高的話,會非自然地形成業(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)注

    9

    文章

    2054

    瀏覽量

    69755
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    860

    瀏覽量

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

    關(guān)注

    0

    文章

    96

    瀏覽量

    9885

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    MySQL數(shù)據(jù)備份與恢復(fù)策略

    數(shù)據(jù)是企業(yè)的核心資產(chǎn),MySQL作為主流的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其數(shù)據(jù)的安全性和可靠性至關(guān)重要。本文將深入探討MySQL
    的頭像 發(fā)表于 07-14 11:11 ?136次閱讀

    企業(yè)級MySQL數(shù)據(jù)庫管理指南

    在當(dāng)今數(shù)字化時(shí)代,MySQL作為全球最受歡迎的開源關(guān)系型數(shù)據(jù)庫,承載著企業(yè)核心業(yè)務(wù)數(shù)據(jù)的存儲與處理。作為數(shù)據(jù)庫管理員(DBA),掌握MySQL
    的頭像 發(fā)表于 07-09 09:50 ?136次閱讀

    MySQL數(shù)據(jù)庫是什么

    MySQL數(shù)據(jù)庫是一種 開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS) ,由瑞典MySQL AB公司開發(fā),后被Oracle公司收購。它通過結(jié)構(gòu)化查詢語言(SQL)進(jìn)行
    的頭像 發(fā)表于 05-23 09:18 ?456次閱讀

    單節(jié)點(diǎn)Elasticsearch+Filebeat+Kibana安裝指南

    單節(jié)點(diǎn)Elasticsearch+Filebeat+Kibana安裝指南
    的頭像 發(fā)表于 05-21 11:06 ?373次閱讀
    單節(jié)點(diǎn)<b class='flag-5'>Elasticsearch</b>+Filebeat+Kibana安裝指南

    利用dockerfile搭建mysql主從集群和redis集群

    ==MySQL主從同步(Replication)是一種實(shí)現(xiàn)數(shù)據(jù)冗余和高可用性的技術(shù),通過將主數(shù)據(jù)庫(Master)的變更操作同步到一個(gè)或多個(gè)
    的頭像 發(fā)表于 05-14 11:38 ?406次閱讀
    利用dockerfile搭建<b class='flag-5'>mysql</b>主從集群和redis集群

    從Delphi、C++ Builder和Lazarus連接到MySQL數(shù)據(jù)

    ? 從 Delphi、C++ Builder 和 Lazarus 連接到 MySQL 數(shù)據(jù)MySQL 數(shù)據(jù)訪問組件(MyDAC)是一個(gè)組件庫,提供從 Delphi 和 C++ Bu
    的頭像 發(fā)表于 01-20 13:47 ?746次閱讀
    從Delphi、C++ Builder和Lazarus連接到<b class='flag-5'>MySQL</b><b class='flag-5'>數(shù)據(jù)</b>庫

    使用插件將Excel連接到MySQL/MariaDB

    ,可以快速地將數(shù)據(jù)MySQL 或 MariaDB 加載到 Excel,立即從數(shù)據(jù)庫刷新 Excel 工作簿中的數(shù)據(jù),編輯這些數(shù)據(jù),并將它
    的頭像 發(fā)表于 01-20 12:38 ?627次閱讀
    使用插件將Excel連接到<b class='flag-5'>MySQL</b>/MariaDB

    適用于MySQL和MariaDB的Python連接器:可靠的MySQL數(shù)據(jù)連接器和數(shù)據(jù)

    和 Linux 的 wheel 包分發(fā)。 直接連接 該解決方案使您能夠通過 TCP/IP 建立與 MySQL 或者 MariaDB 數(shù)據(jù)庫服務(wù)器的直接連接,而無需數(shù)據(jù)庫客戶端庫。另外直接連接可以提高 Python 應(yīng)用程
    的頭像 發(fā)表于 01-17 12:18 ?501次閱讀
    適用于<b class='flag-5'>MySQL</b>和MariaDB的Python連接器:可靠的<b class='flag-5'>MySQL</b><b class='flag-5'>數(shù)據(jù)</b>連接器和<b class='flag-5'>數(shù)據(jù)</b>庫

    如何在Linux環(huán)境下高效安裝部署和配置Elasticsearch

    /CentOS-7-x86_64-DVD-2009.iso elasticsearch-7.10.0-linux-x86_64.tar.gz https://www.elastic.co/cn/downloads/past-releases
    的頭像 發(fā)表于 01-16 11:49 ?1041次閱讀

    MySQL數(shù)據(jù)庫的安裝

    MySQL數(shù)據(jù)庫的安裝 【一】各種數(shù)據(jù)庫的端口 MySQL :3306 Redis :6379 MongoDB :27017 Django :8000 flask :5000 【二】
    的頭像 發(fā)表于 01-14 11:25 ?566次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>數(shù)據(jù)</b>庫的安裝

    在華為云上通過 Docker 容器部署 Elasticsearch 并進(jìn)行性能評測

    運(yùn)行 Elasticsearch 查詢評測 ? 5.2 查看評測結(jié)果 ? 5.3 調(diào)整并發(fā)請求和請求數(shù) ? 6. 總結(jié) ? 前言 隨著數(shù)據(jù)量的
    的頭像 發(fā)表于 01-13 13:36 ?494次閱讀
    在華為云上通過 Docker 容器部署 <b class='flag-5'>Elasticsearch</b> 并進(jìn)行性能評測

    構(gòu)建數(shù)據(jù)庫解決方案,基于華為云 Flexus X 實(shí)例容器化 MySQL 主從同步架構(gòu)

    前言**** 華為云 Flexus X 實(shí)例,融合柔性算力與智能調(diào)度,為數(shù)據(jù)庫解決方案帶來全新突破。采用容器化 MySQL 主從同步架構(gòu),實(shí)現(xiàn)數(shù)據(jù)高效備份與讀寫分離,保障業(yè)務(wù)連續(xù)性與
    的頭像 發(fā)表于 01-07 17:22 ?611次閱讀
    構(gòu)建<b class='flag-5'>數(shù)據(jù)</b>庫解決方案,基于華為云 Flexus X 實(shí)例容器化 <b class='flag-5'>MySQL</b> 主從<b class='flag-5'>同步</b>架構(gòu)

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

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

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

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

    Elasticsearch 再次開源

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