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