成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL數據同步ES的四種方法!你能想到幾種?

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

 本文轉載自微信公眾號「 三分惡」,作者老三 。轉載本文請聯三分惡公眾號。

大家好,我是老三,這期給大家分享一個電商中常見的場景——MySQL數據同步Elasticsearch。

圖片

商品檢索

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

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

圖片

MySQL同步ES

1.同步雙寫

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

圖片

同步雙寫

對于這種方式:

  • 優點:實現簡單
  • 缺點:
  • 業務耦合,商品的管理中耦合大量數據同步代碼
  • 影響性能,寫入兩個存儲,響應時間變長
  • 不便擴展:搜索可能有一些個性化需求,需要對數據進行聚合,這種方式不便實現

2.異步雙寫

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

圖片

異步雙寫

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

圖片

多維度多條件查詢

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

圖片

回查完成聚合

這種方式:

  • 優點:
  • 解耦合,商品服務無需關注數據同步
  • 實時性較好,使用MQ,正常情況下,同步完成在秒級
  • 缺點:
  • 引入了新的組件和服務,增加了復雜度

3.定時任務

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

圖片

定時任務

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

這種方式:

  • 優點:實現比較簡單
  • 缺點:
  • 實時性難以保證
  • 對存儲壓力較大

4.數據訂閱

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

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

圖片

MySQL主從同步

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

圖片

canal同步數據

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

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

圖片

數據訂閱+回查

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

所以使用數據訂閱:

  • 優點:
  • 業務入侵較少
  • 實時性較好

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


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,其實大體上都是類似的幾種方法。

參考:

  • [1]. https://www.infoq.cn/article/1afyz3b6hnhprrg12833
  • [2].https://www.iamle.com/archives/2900.html
  • [3].https://blog.51cto.com/lianghecai/4755693
  • [4].https://qinyuanpei.github.io/posts/1333693167/
  • [5].https://github.com/alibaba/canal/wiki/ClientAdapter


責任編輯:武曉燕 來源: 三分惡
相關推薦

2023-05-30 08:38:25

MySQL數據庫日志

2021-03-10 10:13:39

爬蟲Python代碼

2020-09-18 06:42:21

JavaScript交換值交換變量

2020-09-19 17:31:25

JavaScript

2024-02-18 19:10:13

CIO

2020-07-24 09:56:12

React開發數據

2014-03-17 09:22:43

Linux命令

2022-09-02 14:29:01

JavaScrip數組屬性

2011-07-06 18:07:16

ASP

2024-10-16 18:09:54

2010-08-31 15:51:51

DB2清除數據

2023-03-17 10:51:26

2009-11-23 15:57:51

PHP偽靜態

2022-07-15 14:43:21

數據安全Linux

2011-06-22 15:21:08

XML

2009-02-25 09:52:14

類型轉換.NET 強制轉型

2020-08-10 00:30:55

備份密碼iPhone移動安全

2009-03-31 13:12:30

解析XMLJava

2022-12-07 10:28:22

2022-11-04 13:35:29

IT遠程工作混合工作
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区视频 | 欧美亚洲日本 | 91在线精品秘密一区二区 | 蜜桃免费av | 日本在线视 | 日韩高清国产一区在线 | 一本色道精品久久一区二区三区 | 天天综合久久 | 久久网亚洲 | 人人鲁人人莫人人爱精品 | 午夜三区 | 手机三级电影 | 91亚洲国产成人久久精品网站 | 黄网站在线观看 | 超碰人人人人 | 久久久精品一区二区三区 | 久久久免费电影 | 中文字幕在线观看一区二区 | 亚洲一区在线日韩在线深爱 | 久草网址 | 午夜小电影 | 91视频在线网站 | 亚洲国产成人一区二区 | 涩涩视频在线观看免费 | 96国产精品久久久久aⅴ四区 | 免费黄色成人 | 久久狠狠 | 亚洲一区二区三区在线播放 | 欧美亚洲国产一区二区三区 | 精品久久久久国产免费第一页 | 久久精品亚洲精品国产欧美kt∨ | 日韩中文在线观看 | 麻豆精品一区二区三区在线观看 | 国产亚洲精品久久久优势 | 欧美电影免费观看 | 免费av播放| 欧美日韩淫片 | av在线免费观看网址 | 91精品综合久久久久久五月天 | 久久精品国产清自在天天线 | 成人一区二区三区视频 |