国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es

這篇具有很好參考價值的文章主要介紹了Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

文章目錄
      • 前言
      • 一、數(shù)據(jù)同步方案
        • 1.同步雙寫
          • [2.異步雙寫(MQ方式)](#2MQhttpssocsdnnetsosearchqMQspm1001210130017020_53)
          • 3.基于Mysql表定時掃描同步
          • [4.基于Binlog實時同步](#4BinloghttpssocsdnnetsosearchqBinlogspm1001210130017020_119)
      • [二、數(shù)據(jù)遷移同步工具選型](#httpssocsdnnetsosearchqspm1001210130017020_141)
        • 總結(jié)
前言

我們一般會使用Mysql用來存儲數(shù)據(jù),用Es來做全文檢索和特殊查詢,用redis來做數(shù)據(jù)的緩存

那么如何將數(shù)據(jù)優(yōu)雅的從Mysql同步到Es以及redis呢?

一、數(shù)據(jù)同步方案

1.同步雙寫

這是一種最為簡單的方式,在將數(shù)據(jù)寫到mysql時,同時將數(shù)據(jù)寫到ES或者redis。

這個方法的缺點是代碼嚴重耦合,需要手動維護Mysql和Es數(shù)據(jù)關(guān)系,非常不便于維護。
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis

偽代碼:

    /\*\*
 \* 新增商品
 \*/
    @Transactional(rollbackFor = Exception.class)
    public void addGoods(GoodsDto goodsDto) {
         //1、保存Mysql
         Goods goods = new Goods();
         BeanUtils.copyProperties(goodsDto,goods);
         goodsMapper.insert();
     
         //2、保存ES
         IndexRequest indexRequest = new IndexRequest("goods\_index","\_doc");
         indexRequest.source(JSON.toJSONString(goods), XContentType.JSON);
         indexRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
         highLevelClient.index(indexRequest);
    }


  • 優(yōu)點:
    1、業(yè)務邏輯簡單
    2、實時性高
  • 缺點:
    1、 硬編碼,有需要寫入mysql的地方都需要添加寫入ES的代碼;
    2、 業(yè)務強耦合;
    3、 存在雙寫失敗丟數(shù)據(jù)風險;
    4、 性能較差:本來mysql的性能不是很高,再加一個ES,系統(tǒng)的性能必然會下降。
  • 雙寫失敗風險,包括以下幾種:
    1) ES系統(tǒng)不可用;
    2) 程序和ES之間的網(wǎng)絡(luò)故障;
    3) 程序重啟,導致系統(tǒng)來不及寫入ES等。
    針對這種情況,有數(shù)據(jù)強一致性要求的,就必須雙寫放到事務中來處理,而一旦用上事物,則性能下降更加明顯。
2.異步雙寫(MQ方式)

針對多數(shù)據(jù)源寫入的場景,可以借助MQ實現(xiàn)異步的多源寫入,這種情況下各個源的寫入邏輯互不干擾,不會由于單個數(shù)據(jù)源寫入異?;蚓徛绊懫渌麛?shù)據(jù)源的寫入,雖然整體寫入的吞吐量增大了,但是由于MQ消費是異步消費,所以不適合實時業(yè)務場景。

在執(zhí)行完向Mysql中寫入數(shù)據(jù)的邏輯后,發(fā)送MQ,告訴消費端這個數(shù)據(jù)需要寫入Es,消費端收到消息后執(zhí)行向Es寫入數(shù)據(jù)的邏輯。這個方式的優(yōu)點是Mysql和Es數(shù)據(jù)維護分離,開發(fā)Mysql和Es的人員只需要關(guān)心各自的業(yè)務。缺點是依然需要維護發(fā)送、接收MQ的邏輯,并且引入了MQ組件,增加了系統(tǒng)的復雜度。
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis

偽代碼:

    @Transactional(rollbackFor = Exception.class)
    public boolean parseJdDb(String keyword) throws IOException {
        //向數(shù)據(jù)庫中插入
        List<JdGoods> jdGoods = htmlParseUtil.parseJd(keyword);
        //批量更新Mysql
        boolean b = this.saveBatch(jdGoods);
        log.info("異步同步至ES");
        rabbitTemplate.convertAndSend("es.exchange","es.renew.key", jdGoods);
        return b;
    }

優(yōu)點:
1、性能高
2、不易出現(xiàn)數(shù)據(jù)丟失問題,主要基于MQ消息的消費保障機制,比如ES宕機或者寫入失敗,還能重新消費MQ消息。
3、多源寫入之間相互隔離,便于擴展更多的數(shù)據(jù)源寫入

缺點:
1、硬編碼問題,接入新的數(shù)據(jù)源需要實現(xiàn)新的消費者代碼
3、系統(tǒng)復雜度增加:引入了消息中間件
4、可能出現(xiàn)延時問題:MQ是異步消費模型,用戶寫入的數(shù)據(jù)不一定可以馬上看到,造成延時。

3.基于Mysql表定時掃描同步

上面兩種方案中都存在硬編碼問題,也就是有任何對mysq進行增刪改查的地方要么植入ES代碼,要么替換為MQ代碼,代碼的侵入性太強。

如果對實時性要求不高的情況下,可以考慮用定時器來處理,具體步驟如下:
1、數(shù)據(jù)庫的相關(guān)表中增加一個字段為timestamp的字段,任何crud操作都會導致該字段的時間發(fā)生變化;
2、原來程序中的CURD操作不做任何變化;
3、增加一個定時器程序,讓該程序按一定的時間周期掃描指定的表,把該時間段內(nèi)發(fā)生變化的數(shù)據(jù)提取出來;
4、逐條寫入到ES中。

如下圖所示:
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis

該方案的典型實現(xiàn)是借助logstash實現(xiàn)數(shù)據(jù)同步,其底層實現(xiàn)原理就是根據(jù)配置定期使用sql查詢新增的數(shù)據(jù)寫入ES中,實現(xiàn)數(shù)據(jù)的增量同步。

具體實現(xiàn)可以參考:通過Logstash實現(xiàn)mysql數(shù)據(jù)定時增量同步到ES
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis

優(yōu)點:
1、不改變原來代碼,沒有侵入性、沒有硬編碼;
2、沒有業(yè)務強耦合,不改變原來程序的性能;
3、Worker代碼編寫簡單不需要考慮增刪改查;
缺點:
1、時效性較差,由于是采用定時器根據(jù)固定頻率查詢表來同步數(shù)據(jù),盡管將同步周期設(shè)置到秒級,也還是會存在一定時間的延遲。
2、對數(shù)據(jù)庫有一定的輪詢壓力,一種改進方法是將輪詢放到壓力不大的從庫上。

業(yè)界目前較為流行的方案:Canal實現(xiàn)Mysql數(shù)據(jù)同步至Redis、Elasticsearch

4.基于Binlog實時同步

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)大數(shù)據(jù)工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構(gòu)動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年大數(shù)據(jù)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友。
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis

既有適合小白學習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上大數(shù)據(jù)開發(fā)知識點,真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新

如果你覺得這些內(nèi)容對你有幫助,可以添加VX:vip204888 (備注大數(shù)據(jù)獲?。?/strong>
Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es,2024年程序員學習,mysql,elasticsearch,redis

開發(fā)知識點,真正體系化!**

由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新

如果你覺得這些內(nèi)容對你有幫助,可以添加VX:vip204888 (備注大數(shù)據(jù)獲?。?/strong>
[外鏈圖片轉(zhuǎn)存中…(img-0htuFViP-1712853349909)]文章來源地址http://www.zghlxwxcb.cn/news/detail-856407.html

到了這里,關(guān)于Mysql和ES、Redis數(shù)據(jù)同步方案匯總_redis同步數(shù)據(jù)從mysql到es的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 十萬字圖文詳解mysql、redis、kafka、elasticsearch(ES)多源異構(gòu)不同種類數(shù)據(jù)庫集成、數(shù)據(jù)共享、數(shù)據(jù)同步、不同中間件技術(shù)實現(xiàn)與方案,如何構(gòu)建數(shù)據(jù)倉庫、數(shù)據(jù)湖、數(shù)倉一體化?

    數(shù)據(jù)庫大數(shù)據(jù)量、高并發(fā)、高可用解決方案,十萬字圖文詳解mysql、redis、kafka、elasticsearch(ES)多源異構(gòu)不同種類數(shù)據(jù)庫集成、數(shù)據(jù)共享、數(shù)據(jù)同步、不同中間件技術(shù)實現(xiàn)與方案,如何構(gòu)建數(shù)據(jù)倉庫、數(shù)據(jù)湖、數(shù)倉一體化?Delta Lake、Apache Hudi和Apache Iceberg數(shù)倉一體化技術(shù)架構(gòu)

    2024年02月07日
    瀏覽(56)
  • 基于MySql,Redis,Mq,ES的高可用方案解析

    基于MySql,Redis,Mq,ES的高可用方案解析

    本文將接著前文?1w5字詳細介紹分布式系統(tǒng)的那些技術(shù)方案?文章基礎(chǔ)上,進行實際的案例解析? 高可用對于當下的系統(tǒng)而言,可以說是一個硬指標,常年專注于業(yè)務開發(fā)的我們,對于高可用最直觀的感覺可能就是祈禱應用不要出問題,不要報錯;即便有問題,也最好不是我們

    2024年02月03日
    瀏覽(40)
  • mysql數(shù)據(jù)利用pipe同步至redis

    所有數(shù)據(jù)表,一條記錄一個空間 ps:*4 #表示有4個參數(shù)、$4 #表示“參數(shù)”有4個字節(jié)、 所有數(shù)據(jù)表,一個表一個空間 ps:這里發(fā)現(xiàn)當存在空值時,CONCAT結(jié)果為空,所以對于空數(shù)據(jù)需要做處理 相關(guān)邏輯優(yōu)化 數(shù)據(jù)入庫,如果作為鍵的字段非主鍵,即作為鍵的字段,可能存在相同的

    2024年02月15日
    瀏覽(15)
  • Mysql 數(shù)據(jù)同步到 ES 的技術(shù)方案選型和思考

    Mysql 數(shù)據(jù)同步到 ES 的技術(shù)方案選型和思考

    ES 的幾個顯著特點,能有效補足 MySQL 在企業(yè)級數(shù)據(jù)操作場景的缺陷 文本搜索能力 :ES 是基于倒排索引實現(xiàn)的搜索系統(tǒng),配合多樣的分詞器,在文本模糊匹配搜索上表現(xiàn)得比較好,業(yè)務場景廣泛。 多維篩選性能好 :億級規(guī)模數(shù)據(jù)使用寬表預構(gòu)建(消除 join),配合全字段索引

    2024年04月09日
    瀏覽(34)
  • MySQL數(shù)據(jù)同步到ES的4種解決方案

    MySQL數(shù)據(jù)同步到ES的4種解決方案

    大家應該都在各種電商網(wǎng)站檢索過商品,檢索商品一般都是通過什么實現(xiàn)呢?搜索引擎Elasticsearch。那么問題來了,商品上架,數(shù)據(jù)一般寫入到MySQL的數(shù)據(jù)庫中,那么用于檢索的數(shù)據(jù)又是怎么同步到Elasticsearch的呢? MySQL同步ES 這是能想到的最直接的方式,在寫入MySQL,直接也同

    2024年02月08日
    瀏覽(23)
  • 【ElasticSearch】ES與MySQL數(shù)據(jù)同步方案及Java實現(xiàn)

    【ElasticSearch】ES與MySQL數(shù)據(jù)同步方案及Java實現(xiàn)

    elasticsearch中的酒店數(shù)據(jù)來自于mysql數(shù)據(jù)庫,當mysql中的數(shù)據(jù)發(fā)生改變時,es中的數(shù)據(jù)也要跟著改變,即es與mysql之間的數(shù)據(jù)同步。 操作mysql的微服務hotel-admin不能直接更新es的索引庫,那就由操作es索引庫的微服務hotel-demo來暴露一個更新索引庫的接口給hotel-admin調(diào)用 同步調(diào)用方式

    2024年02月15日
    瀏覽(26)
  • MySQL與ES數(shù)據(jù)同步的四種方案及實踐演示

    MySQL與ES數(shù)據(jù)同步的四種方案及實踐演示

    也就是同步調(diào)用,這是一種最為簡單的方式,在將數(shù)據(jù)寫到mysql時,同時將數(shù)據(jù)寫到ES。 1.業(yè)務邏輯簡單 2實時性高 1.硬編碼,有需要寫入mysql的地方都需要添加寫入ES的代碼 2.業(yè)務強耦合 3.存在雙寫失敗丟數(shù)據(jù)風險 4.性能較差:本來mysql的性能不是很高,再加一個ES,系統(tǒng)的性

    2024年02月09日
    瀏覽(38)
  • Springcloud Alibaba使用Canal將Mysql數(shù)據(jù)實時同步到Redis保證緩存的一致性

    Springcloud Alibaba使用Canal將Mysql數(shù)據(jù)實時同步到Redis保證緩存的一致性

    目錄 ? 1. 背景 2. Windows系統(tǒng)安裝canal 3.Mysql準備工作 4. 公共依賴包 5. Redis緩存設(shè)計 6. mall-canal-service ? canal [k?\\\'n?l] ,譯意為水道/管道/溝渠,主要用途是 基于 MySQL 數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱和消費 。其誕生的背景是早期阿里巴巴因為杭州和美國雙機房部署,存

    2024年02月03日
    瀏覽(20)
  • 生產(chǎn)實踐:Redis與Mysql的數(shù)據(jù)強一致性方案

    數(shù)據(jù)庫和Redis如何保持強一致性,這篇文章告訴你 Redis和Msql來保持數(shù)據(jù)同步,并且強一致,以此來提高對應接口的響應速度,剛開始考慮是用mybatis的二級緩存,發(fā)現(xiàn)坑不少,于是決定自己搞 操作數(shù)據(jù)必須是唯一索引 如果更新數(shù)據(jù)不是唯一索引,則數(shù)據(jù)庫更新后的值,與緩存

    2024年02月05日
    瀏覽(26)
  • MySQL同步ES方案

    MySQL同步ES方案

    在項目開發(fā)中,我們經(jīng)常將 MySQL 作為業(yè)務數(shù)據(jù)庫,ES 作為查詢數(shù)據(jù)庫,用來實現(xiàn)讀寫分離,緩解 MySQL 數(shù)據(jù)庫的查詢壓力,應對海量數(shù)據(jù)的復雜查詢。 這其中有一個很重要的問題,就是如何實現(xiàn) MySQL 數(shù)據(jù)庫和 ES 的數(shù)據(jù)同步,今天和大家聊聊 MySQL 和 ES 數(shù)據(jù)同步的各種方案。

    2024年04月11日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包