本書是一本指導(dǎo)DBA進行數(shù)據(jù)庫開發(fā)和運維的實用手冊,本書共9章,包括漫談數(shù)據(jù)庫、如何提升數(shù)據(jù)庫性能、如何運維好數(shù)據(jù)庫、如何進行數(shù)據(jù)庫設(shè)計、如何做好數(shù)據(jù)庫之間的數(shù)據(jù)同步、認識HTAP技術(shù)、認識數(shù)據(jù)庫的功能原理、認識數(shù)據(jù)庫中的數(shù)學(xué)(邏輯與算法),以及DBA的日常:數(shù)據(jù)庫管理及開發(fā)的最佳實踐。另有附錄DBA雜談。
本書內(nèi)容是資深DBA多年實踐經(jīng)驗的歸納總結(jié),涵蓋DBA日常工作中的主要方面,通過剖析眾多的真實案例,并解讀原理、分享技巧、提供思路,內(nèi)容具備較強的啟發(fā)性和指導(dǎo)性。
本書的受眾包括但不限于想要了解如何提升數(shù)據(jù)庫性能的應(yīng)用開發(fā)人員、DBA、業(yè)務(wù)架構(gòu)師、IT架構(gòu)師、數(shù)據(jù)架構(gòu)師、數(shù)據(jù)分析師、系統(tǒng)架構(gòu)師、解決方案架構(gòu)師和企業(yè)高級管理人員。
DBA老兵薛曉剛及其團隊奉獻給廣大同仁的數(shù)據(jù)庫實踐經(jīng)驗集,內(nèi)容涵蓋數(shù)據(jù)庫性能調(diào)優(yōu)、故障處理、架構(gòu)設(shè)計、數(shù)據(jù)同步、SQL算法等諸多內(nèi)容,解讀廣大數(shù)據(jù)庫從業(yè)者普遍關(guān)心的技術(shù)問題。
本書由蓋國強、白鱔(徐戟)、賀仁龍傾情作序,周正中(德哥)、侯圣文、耿航、吳洋鼎力推薦。
全書采用全彩印刷,閱讀體驗佳;全書內(nèi)容豐富,通過剖析眾多真實案例,解讀原理、分享技巧、提供思路,內(nèi)容具備較強的啟發(fā)性和指導(dǎo)性。
是廣大應(yīng)用開發(fā)人員、DBA、業(yè)務(wù)架構(gòu)師、IT架構(gòu)師、數(shù)據(jù)架構(gòu)師、數(shù)據(jù)分析師、系統(tǒng)架構(gòu)師、解決方案架構(gòu)師和企業(yè)高級管理人員值得一讀的實用手冊。
前言
為什么要寫這本書
數(shù)據(jù)庫是一個獨立的技術(shù)領(lǐng)域,幾乎所有的后端開發(fā)都要和數(shù)據(jù)庫(關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫)打交道,不讀寫數(shù)據(jù)庫的后端應(yīng)用程序幾乎不存在。而應(yīng)用程序中50%的代碼甚至極端情況下80%的代碼都是SQL。所以與其說應(yīng)用程序開發(fā)不如說是基于數(shù)據(jù)庫的應(yīng)用開發(fā)。
作為本書的第一作者,筆者一開始并沒有從事真正意義上的數(shù)據(jù)庫工作,而是從其他工作崗位轉(zhuǎn)到數(shù)據(jù)庫崗位的。在經(jīng)過前輩和名師指導(dǎo)后才慢慢了解了數(shù)據(jù)庫。后來還成為數(shù)據(jù)庫的認證講師,培訓(xùn)過的學(xué)員來自各行各業(yè),有近千人之多。
在不斷深入了解數(shù)據(jù)庫的過程中,筆者發(fā)現(xiàn)很多研發(fā)問題歸根結(jié)底都是數(shù)據(jù)庫的問題,而且發(fā)現(xiàn)并解決這些數(shù)據(jù)庫的相關(guān)問題,可以幫助和指導(dǎo)研發(fā)人員更好地開展工作,于是就全身心地投入到了數(shù)據(jù)庫的應(yīng)用、運維、設(shè)計、架構(gòu)、治理等相關(guān)工作中。在多年的工作和授課中,筆者還發(fā)現(xiàn),即便是有多年工作經(jīng)驗的DBA也仍然對數(shù)據(jù)庫技術(shù)有很多誤解和錯誤的認知,很多基于數(shù)據(jù)庫技術(shù)的問題和教訓(xùn)反反復(fù)復(fù)地出現(xiàn),而且這些問題在全國范圍內(nèi)也具有很強的共性。
因此,筆者決定撰寫一本介紹數(shù)據(jù)庫管理與運維、數(shù)據(jù)架構(gòu)以及數(shù)據(jù)庫開發(fā)技巧的書籍來為廣大DBA解惑,讓開發(fā)人員知道如何使用數(shù)據(jù)庫,讓DBA知道如何指導(dǎo)開發(fā)人員更好地進行應(yīng)用的設(shè)計。希望開發(fā)人員和DBA都明白數(shù)據(jù)才是架構(gòu)的中心。具體來說,筆者希望這本書起到以下作用。
分享經(jīng)驗:筆者和筆者帶領(lǐng)的團隊在實踐中積累了大量的經(jīng)驗和實踐方法,這對于企業(yè)數(shù)據(jù)庫的開發(fā)、運維、設(shè)計、架構(gòu)十分有價值。我們通過本書把這些經(jīng)驗和方法加以總結(jié),供廣大DBA和開發(fā)人員參考,幫助他們更好地發(fā)揮出數(shù)據(jù)庫應(yīng)有的性能,解決或避免大部分在應(yīng)用開發(fā)層面出現(xiàn)的問題和故障,讓讀者少走一些彎路。
DBA重新定位:希望通過這本書,讓廣大DBA明確自己的職業(yè)規(guī)劃和定位,認識想運維好數(shù)據(jù)庫就要從幕后走到臺前,不是單純地去應(yīng)對需求,而是指導(dǎo)開發(fā)人員編寫好的SQL,一方面提升工作效率,另一方面提升自身價值。從運維小工成長為更具價值的架構(gòu)師。
降低企業(yè)IT成本:本書分享的經(jīng)驗、實施方法論和案例,可以為廣大企業(yè)提供非常有價值的借鑒。希望通過這本書,幫助廣大企業(yè)降低數(shù)據(jù)庫的故障率,提升系統(tǒng)的穩(wěn)定性。通過選擇合適的數(shù)據(jù)架構(gòu),避免因為數(shù)據(jù)庫導(dǎo)致的架構(gòu)復(fù)雜而產(chǎn)生的高昂的IT成本。
開發(fā)人員能力提升:希望通過本書給開發(fā)崗位的讀者一些思路,不再做CRUD工程師,而是成為可以集設(shè)計和開發(fā)于一身、從事企業(yè)智能化應(yīng)用建設(shè)和咨詢的專家,更好地幫助企業(yè)實現(xiàn)數(shù)字化轉(zhuǎn)型和智能化應(yīng)用的建設(shè)。
構(gòu)建生態(tài)圈:我們希望通過這本書可以廣結(jié)朋友,無論是DBA、開發(fā)者,還是從事企業(yè)數(shù)字化建設(shè)的朋友。希望廣大讀者朋友可以通過這本書加入到DBA交流群中(掃描封面勒口二維碼加入),能夠相互學(xué)習(xí)、相互啟發(fā)、共同進步。
本書的內(nèi)容
本書內(nèi)容具體介紹如下。
第 1 章 漫談數(shù)據(jù)庫。介紹了數(shù)據(jù)庫的概念和數(shù)據(jù)庫的分類,通過本章,讀者將了解到主流的數(shù)據(jù)庫種類以及數(shù)據(jù)庫技術(shù)的發(fā)展趨勢,包括大數(shù)據(jù)、區(qū)塊鏈這些數(shù)據(jù)庫技術(shù)棧和DBA與數(shù)據(jù)庫的關(guān)系。
第 2 章 如何提升數(shù)據(jù)庫性能。介紹數(shù)據(jù)庫性能優(yōu)化技術(shù),并對不同類型的索引進行了分類和介紹,還介紹了從優(yōu)化需求和設(shè)計兩個方面來提升數(shù)據(jù)庫性能的具體案例。
第 3 章 如何運維好數(shù)據(jù)庫。介紹數(shù)據(jù)庫的主要故障類型和現(xiàn)象,列舉了十幾種各式各樣的數(shù)據(jù)庫故障案例及故障原因分析。
第 4 章 如何進行數(shù)據(jù)庫設(shè)計。介紹了數(shù)據(jù)庫選型、數(shù)據(jù)庫架構(gòu)設(shè)計以及數(shù)據(jù)庫分開與合并的優(yōu)缺點。
第 5 章 如何做好數(shù)據(jù)庫之間的數(shù)據(jù)同步。介紹了數(shù)據(jù)庫同步的各種場景和技術(shù)棧。其中有同構(gòu)數(shù)據(jù)庫的同步,也有異構(gòu)數(shù)據(jù)庫之間的同步。尤其是OGG的微服務(wù)版的實踐,包括官方文檔中沒有全面覆蓋(或者疏漏)的知識點。
第 6 章 認識HTAP技術(shù)。介紹了HTAP技術(shù)架構(gòu)的原理以及對中小企業(yè)的意義,結(jié)合國內(nèi)大多數(shù)企業(yè)現(xiàn)狀,HTAP技術(shù)是去除Hadoop技術(shù)棧的最佳實踐,可以使企業(yè)在滿足業(yè)務(wù)的前提下降低成本。
第 7 章 認識數(shù)據(jù)庫的功能原理。介紹了數(shù)據(jù)庫優(yōu)化器和執(zhí)行器的一些底層原理。有助于讀者了解數(shù)據(jù)庫的運行機制。
第 8 章 認識數(shù)據(jù)庫中的數(shù)學(xué)(邏輯與算法)。介紹了數(shù)據(jù)庫優(yōu)化中涉及的一些邏輯和算法的知識。從邏輯和算法上切入,讓讀者明白優(yōu)化的核心是邏輯和算法。
第 9 章 DBA的日常:數(shù)據(jù)庫管理及開發(fā)的最佳實踐。集中介紹了若干筆者在工作中總結(jié)積累的數(shù)據(jù)庫管理及應(yīng)用開發(fā)的實踐案例,示范性和啟發(fā)性很強,通過這些案例可以解決讀者在數(shù)據(jù)庫開發(fā)、運維、構(gòu)建上的許多問題。
除以上內(nèi)容之外,本書還有附錄1篇:DBA雜談,分享了包括DBA的職業(yè)規(guī)劃以及筆者總結(jié)的SQL開發(fā)規(guī)范等的六個話題。本書另將部分限于篇幅沒有在正文中體現(xiàn)的內(nèi)容以在線的擴展閱讀文檔加以呈現(xiàn),主要內(nèi)容包括介紹各類型數(shù)據(jù)庫的應(yīng)用場景、若干提升數(shù)據(jù)庫性能的實踐案例。讀者可以通過掃描二維碼訪問筆者的微信公眾號閱讀這部分內(nèi)容。
本書的價值創(chuàng)新
筆者認為,本書分享的眾多實踐案例是最具價值的內(nèi)容。這些案例具備很強的啟發(fā)性,例如:從對SQL進行優(yōu)化、提升數(shù)據(jù)庫性能的案例中可以看出,即使不了解業(yè)務(wù),憑借基本的邏輯和算法也可以對數(shù)據(jù)庫進行優(yōu)化,提升數(shù)據(jù)庫性能。對于數(shù)據(jù)庫設(shè)計的案例,可以引導(dǎo)讀者認真思考應(yīng)該怎么做數(shù)據(jù)庫的架構(gòu)設(shè)計,因為良好的架構(gòu)設(shè)計所獲收益遠大于對SQL本身優(yōu)化獲得的收益。在一些案例中強調(diào)了DBA應(yīng)當(dāng)認真考慮如何控制需求、引導(dǎo)需求方提出合理的需求,而不是一味執(zhí)行,因為不合理的需求或者是無意義的需求帶來的問題是很多的,技術(shù)人員是可以指導(dǎo)業(yè)務(wù)方開展工作的。對于數(shù)據(jù)庫故障的案例則側(cè)重強調(diào)了分析解決問題的思路,如果讀者按照本書給出的思路去管理、運維、設(shè)計數(shù)據(jù)庫,那么由應(yīng)用開發(fā)層面出現(xiàn)的問題,基本是可以得到控制的。
本書適合的讀者人群
本書適合對數(shù)據(jù)庫開發(fā)和運維有一定興趣和基礎(chǔ)的讀者,包括但不限于以下人群:
-后端基于數(shù)據(jù)庫的Java開發(fā)人員。
-使用SQL語言從事數(shù)據(jù)分析的分析師。
-從事數(shù)據(jù)庫運維的DBA。
-企業(yè)研發(fā)主管、企業(yè)運維主管。
致謝
在完成本書的過程中,我獲得了許多支持和幫助。首先要感謝我的家人,他們在整個寫作過程中一直給予我勇氣、支持和鼓勵。在寫作期間,我家中發(fā)生了很多事情,但家人們?nèi)匀蝗χС治胰ネ瓿蓵。沒有他們的支持和幫助,我不可能完成這本書。
我還要感謝本書的其他合作者,他們是:王明杰博士,現(xiàn)擔(dān)任歐冶云商物聯(lián)網(wǎng)技術(shù)首席師,負責(zé)撰寫本書物聯(lián)網(wǎng)場景和時序數(shù)據(jù)庫的相關(guān)內(nèi)容;宋希,現(xiàn)擔(dān)任歐冶云商資深算法工程師,負責(zé)撰寫本書的動態(tài)規(guī)劃相關(guān)內(nèi)容;李歡,來自字節(jié)跳動,作為資深的移動開發(fā)者,他撰寫了移動端數(shù)據(jù)庫的相關(guān)內(nèi)容。唐政、馮元泊、唐永金三位同事幫助歸納整理了我的案例、文章和想法。感謝張博參與書中的配圖制作,還有朱盈易后期幫助筆者解決了一些配圖問題。幾位合作者貢獻良多,也在此表示感謝!
我還要感謝本書的策劃編輯王斌,他為我們提供了很多有益的建議,他的專業(yè)知識和經(jīng)驗對我們來說是寶貴的。
由于筆者水平有限,書中難免出現(xiàn)錯誤和不足之處,敬請廣大讀者批評指正。
薛曉剛
2024年6月24日
薛曉剛,現(xiàn)任歐冶云商股份有限公司數(shù)據(jù)庫首席師,曾服務(wù)于政府、公安、交通、安防、金融、支付等行業(yè)。擁有Oracle、MySQL、PostgreSQL、TiDB、OceanBase、達夢等數(shù)據(jù)庫認證,是Oracle ACE-Pro ( Database )、PostgreSQL ACE Partner、騰訊云TVP、阿里云MVP、TiDB MVA、墨天輪MVP;Oracle OCP認證講師,MySQL OCP認證講師;ITPUB論壇內(nèi)存數(shù)據(jù)庫版主、核心專家、金牌顧問。ITPUB培訓(xùn)專家百人團成員,國內(nèi)數(shù)據(jù)庫風(fēng)云百人團成員,OceanBase數(shù)據(jù)庫觀察團團長,TiDB布道師、布道師組委會會員。中國信息通信研究院創(chuàng)新實驗室成員,開放原子開源基金會OpenTenBase工委會委員,機械工業(yè)出版社專家委員會委員。
王明杰,德國布倫瑞克工業(yè)大學(xué)工學(xué)博士,現(xiàn)任職于歐冶云商股份有限公司,擔(dān)任物聯(lián)網(wǎng)技術(shù)一級首席,致力于物聯(lián)感知、機器視覺、智能自動化等新技術(shù)在鋼鐵行業(yè)供應(yīng)鏈體系中的應(yīng)用融合。負責(zé)編寫本書物聯(lián)網(wǎng)場景及時序數(shù)據(jù)庫的相關(guān)內(nèi)容。
宋希,波爾多大學(xué)數(shù)學(xué)系博士,現(xiàn)任職于歐冶云商股份有限公司,資深算法工程師,主持搭建綜合平臺智能推薦系統(tǒng),參與需求預(yù)測、用戶畫像、在線交易壓力測試等多個項目,獲得多項專利。負責(zé)編寫本書的動態(tài)規(guī)劃的相關(guān)內(nèi)容。
李歡,現(xiàn)任職于字節(jié)跳動,作為移動端音視頻開發(fā)工程師負責(zé)抖音直播連線架構(gòu)設(shè)計,優(yōu)化抖音音視頻用戶體驗,提升直播連線的性能。負責(zé)本書移動端數(shù)據(jù)庫部分相關(guān)內(nèi)容的編寫。
目錄
序言1
序言2
序言3
前言
第1章 漫談數(shù)據(jù)庫1
1.1 什么是數(shù)據(jù)庫2
1.2 數(shù)據(jù)庫發(fā)展史2
1.2.1 國外數(shù)據(jù)庫的歷史2
1.2.2 國內(nèi)數(shù)據(jù)庫的歷史4
1.3 數(shù)據(jù)庫的主要分類6
1.3.1 關(guān)系數(shù)據(jù)庫:傳統(tǒng)交易數(shù)據(jù)庫6
1.3.2 鍵值數(shù)據(jù)庫:基于KV鍵值對的內(nèi)存數(shù)據(jù)庫7
1.3.3 列式數(shù)據(jù)庫:列式存儲的分析型數(shù)據(jù)庫9
1.3.4 文檔型數(shù)據(jù)庫:松散型數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)庫10
1.3.5 圖數(shù)據(jù)庫:用于社交圖譜的數(shù)據(jù)庫11
1.3.6 時序數(shù)據(jù)庫:適用于物聯(lián)網(wǎng)場景的數(shù)據(jù)庫12
1.3.7 搜索引擎數(shù)據(jù)庫:全文索引的數(shù)據(jù)庫14
1.3.8 多模數(shù)據(jù)庫:具有多種數(shù)據(jù)庫模式的融合數(shù)據(jù)庫17
1.3.9 最容易忽視的數(shù)據(jù)庫移動端數(shù)據(jù)庫19
1.4 數(shù)據(jù)庫應(yīng)用的發(fā)展趨勢22
1.4.1 國外數(shù)據(jù)庫應(yīng)用發(fā)展趨勢22
1.4.2 國內(nèi)數(shù)據(jù)庫應(yīng)用發(fā)展趨勢24
1.5 數(shù)據(jù)庫與新興數(shù)字技術(shù)30
1.5.1 數(shù)據(jù)庫與大數(shù)據(jù)技術(shù)30
1.5.2 數(shù)據(jù)庫的延伸:區(qū)塊鏈、物聯(lián)網(wǎng)32
1.6 與數(shù)據(jù)庫長相廝守的DBA33
1.6.1 DBA的定義與內(nèi)涵33
1.6.2 DBA的工作職責(zé)34
1.6.3 DBA需要具備的能力35
1.6.4 DBA的價值35
1.6.5 DBA是可以做一輩子的職業(yè)36
第2章 如何提升數(shù)據(jù)庫性能38
2.1 通過索引提升性能39
2.1.1 索引的概念及原理39
2.1.2 索引的種類44
2.1.3 規(guī)避索引使用的誤區(qū)68
2.1.4 通過索引實現(xiàn)海量數(shù)據(jù)中的高效查詢70
2.1.5 自動化索引:數(shù)據(jù)庫自治的趨勢71
2.2 通過SQL優(yōu)化提升性能78
2.2.1 SQL優(yōu)化實現(xiàn)高速執(zhí)行任務(wù)79
2.2.2 慎用分頁有效提升性能86
2.2.3 從認知上杜絕低效SQL89
2.3 避免數(shù)據(jù)庫對象設(shè)計失誤91
2.3.1 避免不必要的多表關(guān)聯(lián)導(dǎo)致的低效查詢91
2.3.2 避免動態(tài)計算結(jié)果沒有單獨存儲導(dǎo)致的低效查詢93
2.3.3 避免沒有明確需求查詢條件導(dǎo)致的低效查詢97
2.3.4 避免過度分表98
2.4 從識別需求的合理性提升性能101
2.4.1 拒絕無效需求101
2.4.2 正確理解開發(fā)需求104
2.4.3 拒絕不合理的需求106
2.4.4 引導(dǎo)業(yè)務(wù)改善需求107
2.5 減少IO操作提升數(shù)據(jù)庫性能108
2.5.1 正確認識數(shù)據(jù)庫的性能108
2.5.2 減少IO交互批量寫入數(shù)據(jù)(MySQL)110
2.5.3 減少IO交互批量寫入數(shù)據(jù)(Oracle)122
2.5.4 減少IO交互批量寫入數(shù)據(jù)(PostgreSQL)123
2.5.5 精簡架構(gòu)127
第3章 如何運維好數(shù)據(jù)庫130
3.1 運維好數(shù)據(jù)庫的關(guān)鍵:處理故障131
3.1.1 常見的數(shù)據(jù)庫故障類型131
3.1.2 數(shù)據(jù)庫故障的危害132
3.2 分析處理數(shù)據(jù)庫故障的關(guān)鍵點133
3.2.1 分析數(shù)據(jù)庫故障的主要原因SQL133
3.2.2 分析SQL的主要問題處理速度慢134
3.2.3 分析數(shù)據(jù)庫參數(shù)對數(shù)據(jù)庫的影響134
3.2.4 分析硬件短板帶來的問題IO吞吐能力與CPU計算能力135
3.3 數(shù)據(jù)庫故障處理的典型案例分析138
3.3.1 一次Elasticsearch誤刪除的故障分析139
3.3.2 一次配置文件丟失導(dǎo)致的MySQL數(shù)據(jù)庫故障分析141
3.3.3 一次In-Memory丟失引起的故障分析146
3.3.4 一次疑似分區(qū)查詢異常的故障分析150
3.3.5 一次數(shù)據(jù)庫歸檔導(dǎo)致的故障分析159
3.3.6 一次數(shù)據(jù)庫binlog寫入失敗的故障分析163
3.3.7 一次兩表關(guān)聯(lián)導(dǎo)致的故障分析165
3.3.8 數(shù)據(jù)庫連接數(shù)與連接復(fù)用不當(dāng)?shù)墓收戏治?66
3.3.9 一次數(shù)據(jù)庫CPU使用率100%的故障分析168
3.3.10 一次數(shù)據(jù)庫索引不當(dāng)引起的故障分析169
3.3.11 一次數(shù)據(jù)庫主從延遲過大的故障分析172
3.3.12 一次數(shù)據(jù)庫主從不一致的故障分析174
3.3.13 一次Redis數(shù)據(jù)庫無法啟動的故障分析182
3.3.14 一次MySQL數(shù)據(jù)庫數(shù)據(jù)類型不恰當(dāng)導(dǎo)致的故障183
3.3.15 一次數(shù)據(jù)庫全表查詢的優(yōu)化187
第4章 如何進行數(shù)據(jù)庫設(shè)計197
4.1 數(shù)據(jù)庫都有哪些架構(gòu)198
4.1.1 集中式架構(gòu)198
4.1.2 分布式架構(gòu)200
4.1.3 數(shù)據(jù)庫內(nèi)部的體系架構(gòu)201
4.1.4 煙囪式的數(shù)據(jù)庫架構(gòu)201
4.1.5 獨立業(yè)務(wù)線的數(shù)據(jù)庫架構(gòu)202
4.2 根據(jù)實際場景選擇數(shù)據(jù)庫架構(gòu)203
4.3 五個維度談數(shù)據(jù)庫選型203
4.3.1 從業(yè)務(wù)場景特征維度204
4.3.2 從數(shù)據(jù)規(guī)模大小維度204
4.3.3 從用戶自身開發(fā)團隊能力維度205
4.3.4 從用戶自身運維團隊能力維度205
4.3.5 從公司管理能力維度206
4.4 數(shù)據(jù)庫拆分的利與弊206
4.4.1 數(shù)據(jù)庫拆分的背景207
4.4.2 數(shù)據(jù)庫拆分的三大問題:一致性、數(shù)據(jù)關(guān)聯(lián)、數(shù)據(jù)同步208
4.4.3 分表帶來的問題:一致性、聚合、排序、擴縮容208
4.5 如何看待數(shù)據(jù)庫的合并210
4.5.1 為何要做數(shù)據(jù)庫合并210
4.5.2 數(shù)據(jù)庫合并的意義:降成本、提升穩(wěn)定性211
4.5.3 數(shù)據(jù)庫合并帶來的問題:雞蛋放在一個籃子里211
4.5.4 數(shù)據(jù)庫合并的前提:高質(zhì)量SQL、硬件的進步、穩(wěn)定的基礎(chǔ)環(huán)境212
4.6 CAP理論與分布式數(shù)據(jù)庫212
4.6.1 CAP理論概述213
4.6.2 CAP理論的延展213
4.6.3 分庫分表不是分布式數(shù)據(jù)庫214
4.7 如何看待數(shù)據(jù)庫與中間件215
4.7.1 數(shù)據(jù)庫與中間件:上下游的難兄難弟215
4.7.2 中間件內(nèi)存溢出的原因:源頭還是數(shù)據(jù)庫215
4.7.3 適當(dāng)減少數(shù)據(jù)庫與中間件的數(shù)量:避免不必要的故障節(jié)點216
第5章 如何做好數(shù)據(jù)庫之間的數(shù)據(jù)同步217
5.1 數(shù)據(jù)同步的作用218
5.1.1 實現(xiàn)數(shù)據(jù)傳輸218
5.1.2 實現(xiàn)數(shù)據(jù)匯聚218
5.1.3 實現(xiàn)數(shù)據(jù)遷移219
5.2 數(shù)據(jù)庫同步的分類219
5.2.1 同構(gòu)數(shù)據(jù)庫的同步219
5.2.2 異構(gòu)數(shù)據(jù)庫的同步219
5.2.3 數(shù)據(jù)庫到消息隊列的同步219
5.2.4 數(shù)據(jù)庫到Hadoop的數(shù)據(jù)同步219
5.3 同構(gòu)數(shù)據(jù)庫數(shù)據(jù)同步的示例220
5.3.1 使用dblink實現(xiàn)Oracle數(shù)據(jù)庫之間的數(shù)據(jù)同步220
5.3.2 使用物化視圖實現(xiàn)遠程Oracle數(shù)據(jù)庫之間的數(shù)據(jù)同步226
5.3.3 使用插件實現(xiàn)MySQL數(shù)據(jù)庫之間的數(shù)據(jù)同步231
5.3.4 利用數(shù)據(jù)同步實現(xiàn)MySQL的版本升級234
5.3.5 采用多源復(fù)制的功能實現(xiàn)MySQL數(shù)據(jù)庫之間的數(shù)據(jù)同步239
5.3.6 采用主從模式實現(xiàn)PostgreSQL主從數(shù)據(jù)同步242
5.4 異構(gòu)數(shù)據(jù)庫同步的實例基于OGG248
5.4.1 CDC簡介248
5.4.2 OGG概述249
5.4.3 OGG微服務(wù)版的安裝部署249
5.4.4 使用OGG for Oracle實現(xiàn)Oracle數(shù)據(jù)庫之間的數(shù)據(jù)同步251
5.4.5 使用OGG for MySQL實現(xiàn)MySQL與異構(gòu)數(shù)據(jù)庫的同步279
5.4.6 使用OGG for BigData實現(xiàn)大數(shù)據(jù)組件與異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)同步284
第6章 認識HTAP技術(shù)294
6.1 HTAP的概念及其價值295
6.1.1 HTAP:混合事物/分析處理295
6.1.2 HTAP的價值295
6.2 HTAP的幾種實現(xiàn)方式297
6.2.1 垂直方向的實現(xiàn):以O(shè)racle數(shù)據(jù)庫為例297
6.2.2 水平方向的實現(xiàn):以MySQL、TiDB數(shù)據(jù)庫為例298
6.2.3 其他類型數(shù)據(jù)庫的實現(xiàn)方式298
第7章 認識數(shù)據(jù)庫的功能原理300
7.1 優(yōu)化器基于統(tǒng)計學(xué)原理301
7.2 數(shù)據(jù)庫的查詢火山模型316
7.3 數(shù)據(jù)庫AI向量化319
7.4 編譯執(zhí)行323
第8章 認識數(shù)據(jù)庫中的數(shù)學(xué)(邏輯與算法)326
8.1 數(shù)據(jù)庫中的典型邏輯與算法327
8.1.1 從斐波那契數(shù)列到數(shù)據(jù)分析327
8.1.2 增加數(shù)據(jù)維度處理減少關(guān)聯(lián)332
8.1.3 多表關(guān)聯(lián)算法一對多與多對多336
8.1.4 排除處理算法笛卡兒積341
8.1.5 函數(shù)算法對SQL的影響348
8.2 動態(tài)規(guī)劃法在數(shù)據(jù)庫中的應(yīng)用351
8.2.1 動態(tài)規(guī)劃原理1:爬樓梯351
8.2.2 動態(tài)規(guī)劃原理2:背包問題355
8.2.3 動態(tài)規(guī)劃的五部曲361
8.3 數(shù)據(jù)庫開發(fā)中的邏輯思維362
8.3.1 元數(shù)據(jù)的空與非空362
8.3.2 優(yōu)化器處理極值和極限:加速查詢速度369
8.3.3 并發(fā)處理熱點的邏輯:避免鎖371
8.3.4 減庫存的邏輯:從設(shè)計出發(fā)防止超賣373
第9章 DBA的日常:數(shù)據(jù)庫管理及開發(fā)的最佳實踐375
9.1 七個針對數(shù)據(jù)庫特性的最佳實踐376
9.1.1 Oracle的DML重定向376
9.1.2 Oracle的資源隔離381
9.1.3 MySQL的延遲復(fù)制挽救誤刪除389
9.1.4 PostgreSQL的延遲復(fù)制395
9.1.5 數(shù)據(jù)庫對于磁盤IO吞吐的要求402
9.2 面向執(zhí)行器和優(yōu)化器的最佳實踐403
9.2.1 主流數(shù)據(jù)庫的事務(wù)異常處理機制對比(MySQL、PostgreSQL、Oracle)403
9.2.2 MySQL和達夢兩個數(shù)據(jù)庫優(yōu)化器的對比406
9.2.3 SQL語句的解析過程分析407
9.2.4 優(yōu)化器的多表關(guān)聯(lián)411
9.2.5 SQL使用in進行子查詢412
9.2.6 數(shù)據(jù)歸檔和數(shù)據(jù)遷移419
9.3 數(shù)據(jù)庫的復(fù)制(克。┡c高可用受控切換的最佳實踐424
9.3.1 Oracle的PDB數(shù)據(jù)庫克隆425
9.3.2 MySQL克隆的關(guān)鍵點428
9.3.3 MySQL的MGR架構(gòu)以及受控切換431
9.3.4 PostgreSQL的高可用切換434
9.3.5 Redis的高可用切換440
9.4 三個SQL編寫的最佳實踐445
9.4.1 關(guān)于MyBatis開發(fā)框架使用綁定變量的實踐445
9.4.2 使用exists的SQL語句的改寫451
9.4.3 設(shè)計上出發(fā)減少SQL的標量子查詢458
9.5 時序數(shù)據(jù)庫使用的最佳實踐463
9.5.1 時序數(shù)據(jù)庫的數(shù)據(jù)庫表設(shè)計463
9.5.2 時序數(shù)據(jù)庫的數(shù)據(jù)分析466
附錄 DBA雜談468