ES 的幾個顯著特點,能有效補足 MySQL 在企業(yè)級數(shù)據(jù)操作場景的缺陷
文本搜索能力:ES 是基于倒排索引實現(xiàn)的搜索系統(tǒng),配合多樣的分詞器,在文本模糊匹配搜索上表現(xiàn)得比較好,業(yè)務(wù)場景廣泛。
多維篩選性能好:億級規(guī)模數(shù)據(jù)使用寬表預(yù)構(gòu)建(消除 join),配合全字段索引,使 ES 在多維篩選能力上具備壓倒性優(yōu)勢,加上文本搜索能力,獨此一家。
開源和商業(yè)并行:ES 開源生態(tài)非?;钴S,具備大量的用戶群體,同時其內(nèi)后也有獨立的商業(yè)公司支持,而這讓用戶根據(jù)自身特點有了更加多樣、漸進的選擇。
為什么是數(shù)據(jù)遷移同步方式?
穩(wěn)定性好:遷移同步對主數(shù)據(jù)庫的操作主要是進行數(shù)據(jù)和日志的順序讀取,同時并發(fā)小,對主數(shù)據(jù)庫穩(wěn)定性影響較?。ㄝ^多的下游訂閱可能在網(wǎng)絡(luò)層面存在影響,一般用消息解決)。另外日志(Binlog/WAL/Redo 等)可重放特質(zhì),讓下游丟數(shù)據(jù)的可能性大大減?。ㄌ幚砗脙绲鹊那闆r下)
業(yè)務(wù)解耦:一般而言主數(shù)據(jù)庫更多承載事務(wù)型操作,而下游數(shù)據(jù)系統(tǒng)承載運營等層面的業(yè)務(wù)。
業(yè)務(wù)侵入小:數(shù)據(jù)遷移同步對業(yè)務(wù)無侵入,雙端對接標(biāo)準(zhǔn)數(shù)據(jù)庫(源),可以便利地找到開源、商業(yè)、云等各個方向的成熟解決方案或產(chǎn)品。
業(yè)務(wù)適配性好:某些數(shù)據(jù)遷移同步產(chǎn)品能夠嵌入業(yè)務(wù)邏輯,讓下游獲取到更加貼近業(yè)務(wù)的數(shù)據(jù),從而讓數(shù)據(jù)服務(wù)更加有效和便捷。
數(shù)據(jù)遷移同步模型選擇
訂閱消費
優(yōu)點:
堆積能力:由于引入了消息隊列,所以整個鏈路是具備變更數(shù)據(jù)的堆積能力的。假設(shè)變更數(shù)據(jù)消費的比較慢,MySQL 本地較老的 binlog 文件由于磁盤空間的不足而被刪除時,消息隊列的數(shù)據(jù)依然存在,數(shù)據(jù)同步依然可以進行。
數(shù)據(jù)分發(fā)能力:引入消息隊列后可以支持多方訂閱。如果下游多個應(yīng)用都依賴源端的變更數(shù)據(jù),可以訂閱同一份 topic 即可。
數(shù)據(jù)加工能力:由于變更數(shù)據(jù)是由下游消費者訂閱,因此訂閱后可以靈活的做一些數(shù)據(jù)加工。例如從外部調(diào)用微服務(wù)接口或者反查一些數(shù)據(jù)來做數(shù)據(jù)加工都是比較方便的。
缺點:
運維成本相對較高:包含了較多的組件和應(yīng)用,運維保障相對復(fù)雜。
穩(wěn)定性風(fēng)險較高:一環(huán)出問題會導(dǎo)致整個數(shù)據(jù)同步鏈路的穩(wěn)定性收到影響。而且排查和定位問題也會比較困難。
端對端直連
優(yōu)點:
低延遲:端對端的直接同步,鏈路較短,延遲低
穩(wěn)定性好:鏈路組件少,出問題概率較低,定位排查均比較容易。適合對數(shù)據(jù)精確性高的嚴(yán)苛場景。
功能拓展性強:對端寫入消息系統(tǒng),模擬訂閱模式,可拓展性強
運維部署檢點:鏈路組件少,部署運維更簡單
數(shù)據(jù)遷移同步模型選擇總結(jié)
如果沒有眾多的下游數(shù)據(jù)訂閱,建議采用直連模式。數(shù)據(jù)同步鏈路往往置于在線業(yè)務(wù)中,隨著業(yè)務(wù)規(guī)模以及重要性逐漸加大,鏈路穩(wěn)定性更為重要些。
另外端到端模式只要支持對端數(shù)據(jù)源為消息中間件,可立即實現(xiàn)訂閱模式,數(shù)據(jù)加工能力在某些數(shù)據(jù)遷移同步產(chǎn)品上可通過上傳業(yè)務(wù)代碼運行的方式解決。
數(shù)據(jù)架構(gòu)在滿足業(yè)務(wù)需求的同時,簡潔和清晰能夠讓系統(tǒng)更加易于維護和排查,當(dāng)遇到鏈路每天同步大量數(shù)據(jù)、偶爾丟幾條需要排查,或同步鏈路卡住不同步等情況,端對端方式往往體現(xiàn)出相當(dāng)大的優(yōu)勢。
MySQL 關(guān)聯(lián)表在 ES 上的設(shè)計
關(guān)系型數(shù)據(jù)庫中的表 join 關(guān)系在 ES 可以用幾種數(shù)據(jù)類型來表達(dá),包括 objected,nested,join 三種。
objected
object 類型可以存儲嵌套結(jié)構(gòu)。
優(yōu)點:表示主 field 和 object 內(nèi)部 field 之間的一對多關(guān)系,支持 doc 的 join 查詢。由于所有查詢時依賴的關(guān)聯(lián)數(shù)據(jù)也都在一個文檔內(nèi),避免了 ES 內(nèi)部的 join,查詢效率較高。
缺點:一對多關(guān)系只能保留一層,多于一層的會被打平,會丟失嵌套 field 內(nèi)部的關(guān)聯(lián)關(guān)系。
nested
nested 類型可以存儲嵌套結(jié)構(gòu),表示一對多關(guān)系,是 object 類型的拓展。
優(yōu)點:
不會出現(xiàn) object 的缺點,整個嵌套關(guān)系是完整維護的,子文檔內(nèi)部關(guān)聯(lián)關(guān)系保存是完整的
關(guān)聯(lián)數(shù)據(jù)通過實現(xiàn)上自然關(guān)聯(lián)到主文檔上,搜索時性能較好(相對于 join)
缺點:
一個 nested field 只能屬于一個主文檔
在 nested 類型中,子文檔和主文檔之間強綁定,主文檔更新的時候會強制更新子文檔。在寫多讀少的場景,新能開銷較大。
child 文檔的查詢必須通過父文檔再找到子文檔
子文檔頻繁修改的話會影響別的子文檔和父文檔,因為本質(zhì)上在 lucene 實現(xiàn)上是父文檔下的冗余存檔
join
join 類型可以配置父子文檔,通過父子文檔來實現(xiàn)一對多的能力,一個索引只能建一個。相比 nested 類型,該類型更加靈活。父子文檔之間通過 parentId 來關(guān)聯(lián),實際實現(xiàn)上他們就是獨立的文檔。
優(yōu)點:
子文檔更新不影響父文檔和其他子文檔
一個子文檔可以單獨搜索
一個文檔在作為子文檔時可以自己選擇屬于哪個父文檔。通過 relation 可以指定不同的 join 列
缺點:
需要建個全局序數(shù),用于服務(wù)于父子文檔的關(guān)聯(lián)關(guān)系,這個會影響搜索性能
join 和 nested 類型比較
join 適合寫多讀少場景,更加適合關(guān)注索引性能的場景。這意味著更新的生效會更快,但是搜索時的開銷也相對大些
nested 適合讀多寫少的場景,更加關(guān)注搜索的性能
去規(guī)范化實現(xiàn)
下面將介紹幾種數(shù)據(jù)同步去規(guī)范化的幾種方式:
主表冗余數(shù)據(jù)
業(yè)務(wù)側(cè)將一些查詢時需要的關(guān)系數(shù)據(jù)提前冗余在源表的一個字段中。
優(yōu)點:處理模式能應(yīng)對各種一對多的關(guān)聯(lián)關(guān)系,對數(shù)據(jù)同步工具的功能要求低,配置簡單,只需要支持單同步到 ES 即可。
缺點:
索引、搜索性能非最佳:提供給 ES 的不是構(gòu)建好的寬表數(shù)據(jù)。這種實現(xiàn)方式會有索引、搜索性能方面的額外開銷,不是性能最佳的實現(xiàn)方式。
業(yè)務(wù)系統(tǒng)入侵:業(yè)務(wù)系統(tǒng)寫主數(shù)據(jù)的時候需要額外寫入信息。
主數(shù)據(jù)庫表冗余過多數(shù)據(jù):關(guān)系型數(shù)據(jù)庫表冗余了過多其他表的信息,可能存在存儲和性能開銷。
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!
如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲取?。。▊渥ava獲?。?/strong>

最后
小編在這里分享些我自己平時的學(xué)習(xí)資料,由于篇幅限制,pdf文檔的詳解資料太全面,細(xì)節(jié)內(nèi)容實在太多啦,所以只把部分知識點截圖出來粗略的介紹,每個小節(jié)點里面都有更細(xì)化的內(nèi)容!
程序員代碼面試指南 IT名企算法與數(shù)據(jù)結(jié)構(gòu)題目最優(yōu)解
這是” 本程序員面試寶典!書中對IT名企代碼面試各類題目的最優(yōu)解進行了總結(jié),并提供了相關(guān)代碼實現(xiàn)。針對當(dāng)前程序員面試缺乏權(quán)威題目匯總這一-痛點, 本書選取將近200道真實出現(xiàn)過的經(jīng)典代碼面試題,幫助廣“大程序員的面試準(zhǔn)備做到萬無一失。 “刷”完本書后,你就是“題王”!
《TCP-IP協(xié)議組(第4版)》
本書是介紹TCP/IP協(xié)議族的經(jīng)典圖書的最新版本。本書自第1版出版以來,就廣受讀者歡迎。
本書最新版進行」護元,以體境計算機網(wǎng)絡(luò)技不的最新發(fā)展,全書古有七大部分共30草和7個附錄:第一部分介紹一些基本概念和基礎(chǔ)底層技術(shù):第二部分介紹網(wǎng)絡(luò)層協(xié)議:第三部分介紹運輸層協(xié)議;第四部分介紹應(yīng)用層協(xié)議:第五部分介紹下一代協(xié)議,即IPv6協(xié)議:第六部分介紹網(wǎng)絡(luò)安全問題:第七部分給出了7個附錄。
Java開發(fā)手冊(嵩山版)
這個不用多說了,阿里的開發(fā)手冊,每次更新我都會看,這是8月初最新更新的**(嵩山版)**
MySQL 8從入門到精通
本書主要內(nèi)容包括MySQL的安裝與配置、數(shù)據(jù)庫的創(chuàng)建、數(shù)據(jù)表的創(chuàng)建、數(shù)據(jù)類型和運算符、MySQL 函數(shù)、查詢數(shù)據(jù)、數(shù)據(jù)表的操作(插入、更新與刪除數(shù)據(jù))、索引、存儲過程和函數(shù)、視圖、觸發(fā)器、用戶管理、數(shù)據(jù)備份與還原、MySQL 日志、性能優(yōu)化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL數(shù)據(jù)庫和PDO數(shù)據(jù)庫抽象類庫等。最后通過3個綜合案例的數(shù)據(jù)庫設(shè)計,進步講述 MySQL在實際工作中的應(yīng)用。
Spring5高級編程(第5版)
本書涵蓋Spring 5的所有內(nèi)容,如果想要充分利用這一領(lǐng)先的企業(yè)級 Java應(yīng)用程序開發(fā)框架的強大功能,本書是最全面的Spring參考和實用指南。
本書第5版涵蓋核心的Spring及其與其他領(lǐng)先的Java技術(shù)(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本書的重點是介紹如何使用Java配置類、lambda 表達(dá)式、Spring Boot以及反應(yīng)式編程。同時,將與企業(yè)級應(yīng)用程序開發(fā)人員分享一些見解和實際經(jīng)驗,包括遠(yuǎn)程處理、事務(wù)、Web 和表示層,等等。
JAVA核心知識點+1000道 互聯(lián)網(wǎng)Java工程師面試題
企業(yè)IT架構(gòu)轉(zhuǎn)型之道 阿里巴巴中臺戰(zhàn)略思想與架構(gòu)實戰(zhàn)
本書講述了阿里巴巴的技術(shù)發(fā)展史,同時也是-部互聯(lián)網(wǎng)技 術(shù)架構(gòu)的實踐與發(fā)展史。文章來源:http://www.zghlxwxcb.cn/news/detail-845485.html
《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實戰(zhàn)項目源碼》,點擊傳送門即可獲?。?/strong>
心知識點+1000道 互聯(lián)網(wǎng)Java工程師面試題**
[外鏈圖片轉(zhuǎn)存中…(img-SLItUsnQ-1712176405265)]
[外鏈圖片轉(zhuǎn)存中…(img-MFgNDVly-1712176405265)]
企業(yè)IT架構(gòu)轉(zhuǎn)型之道 阿里巴巴中臺戰(zhàn)略思想與架構(gòu)實戰(zhàn)
本書講述了阿里巴巴的技術(shù)發(fā)展史,同時也是-部互聯(lián)網(wǎng)技 術(shù)架構(gòu)的實踐與發(fā)展史。
[外鏈圖片轉(zhuǎn)存中…(img-TEYZk22p-1712176405266)]
《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實戰(zhàn)項目源碼》,點擊傳送門即可獲取!文章來源地址http://www.zghlxwxcb.cn/news/detail-845485.html
到了這里,關(guān)于Mysql 數(shù)據(jù)同步到 ES 的技術(shù)方案選型和思考的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!