精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

MySQL數據如何同步Elasticsearch

數據分析與開發 ? 來源:三分惡 ? 2023-03-24 13:44 ? 次閱讀

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

商品檢索

大家應該都在各種電商網站檢索過商品,檢索商品一般都是通過什么實現呢?搜索引擎Elasticsearch。

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

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

MySQL同步ES

1.同步雙寫

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

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

同步雙寫

對于這種方式:

優點:實現簡單

缺點:

業務耦合,商品的管理中耦合大量數據同步代碼

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

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

2.異步雙寫

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

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

異步雙寫

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

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

多維度多條件查詢

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

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

回查完成聚合

這種方式:

優點:

解耦合,商品服務無需關注數據同步

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

缺點:

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

3.定時任務

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

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

定時任務

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

這種方式:

優點:實現比較簡單

缺點:

實時性難以保證

對存儲壓力較大

4.數據訂閱

還有一種方式,就是最時興的數據訂閱。

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

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

MySQL主從同步

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

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

canal同步數據

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

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

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

數據訂閱+回查

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

所以使用數據訂閱:

優點:

業務入侵較少

實時性較好

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

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

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






審核編輯:劉清

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

    關注

    8

    文章

    1933

    瀏覽量

    67927
  • MySQL
    +關注

    關注

    1

    文章

    802

    瀏覽量

    26448
  • MYSQL數據庫
    +關注

    關注

    0

    文章

    95

    瀏覽量

    9382

原文標題:MySQL數據同步ES的4種解決方案!

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    香港云服務器怎么部署MySQL數據庫?

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

    Elasticsearch 再次開源

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

    適用于MySQL的dbForge架構比較

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

    MySQL的整體邏輯架構

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

    如何將MS訪問數據轉換為MySQL

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

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

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

    怎么簡單實現由Labview讀取的串口數據自增寫入mysql5.7數據庫中?

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

    mysql怎么新建一個數據

    mysql怎么新建一個數據庫 如何新建一個數據庫在MySQL中 創建一個數據庫是MySQL中的基
    的頭像 發表于 12-28 10:01 ?855次閱讀

    mysql密碼忘了怎么重置

    mysql密碼忘了怎么重置? MySQL是一種開源的關系型數據庫管理系統,密碼用于保護數據庫的安全性和保密性。如果你忘記了MySQL的密碼,
    的頭像 發表于 12-27 16:51 ?6417次閱讀

    數據數據恢復—未開啟binlog的Mysql數據數據恢復案例

    mysql數據數據恢復環境: 本地服務器,windows server操作系統 ,部署有mysql單實例,數據庫引擎類型為innodb,
    的頭像 發表于 12-08 14:18 ?1102次閱讀
    <b class='flag-5'>數據</b>庫<b class='flag-5'>數據</b>恢復—未開啟binlog的<b class='flag-5'>Mysql</b><b class='flag-5'>數據</b>庫<b class='flag-5'>數據</b>恢復案例

    eclipse怎么連接數據mysql

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

    MySQL數據庫的url地址

    MySQL數據庫的URL地址是用于連接到MySQL服務器的地址。URL是一種統一資源定位符,用于指定特定資源的位置和訪問方式。MySQL數據
    的頭像 發表于 12-06 10:58 ?2560次閱讀

    mysql數據庫基礎命令

    MySQL是一個流行的關系型數據庫管理系統,經常用于存儲、管理和操作數據。在本文中,我們將詳細介紹MySQL的基礎命令,并提供與每個命令相關的詳細解釋。 登錄
    的頭像 發表于 12-06 10:56 ?552次閱讀

    oracle和mysql語法區別大嗎

    Oracle和MySQL是兩種不同的關系型數據庫管理系統(RDBMS)。雖然它們都是遵循SQL標準,但在語法和特性上仍存在一些區別。以下是對Oracle和MySQL語法區別的詳細說明: 數據
    的頭像 發表于 12-06 10:26 ?1132次閱讀

    php的mysql無法啟動

    MySQL是一種常用的關系型數據庫管理系統,而PHP是一種廣泛應用于服務器端的腳本語言。在使用PHP開發網站或應用時,經常會碰到MySQL無法啟動的問題。本文將詳細介紹解決MySQL
    的頭像 發表于 12-04 15:59 ?1470次閱讀