2023年如何選擇合適的數(shù)據(jù)庫(kù)??
譯文譯者 | 布加迪
審校 | 孫淑娟?
數(shù)據(jù)庫(kù)常常是應(yīng)用系統(tǒng)中最大的性能瓶頸。一旦部署到生產(chǎn)環(huán)境中,就很難遷移,因此為應(yīng)用系統(tǒng)選擇合適的數(shù)據(jù)庫(kù)至關(guān)重要。?
做出正確決定的一個(gè)重要部分是知道面臨哪些選擇。數(shù)據(jù)庫(kù)領(lǐng)域在過(guò)去幾年迅速發(fā)生了變化,本文將試圖探討以下幾個(gè)主題:?
- 概述2023年的數(shù)據(jù)庫(kù)生態(tài)系統(tǒng)。?
- 從技術(shù)角度闡述到底是什么因素使不同類型的數(shù)據(jù)庫(kù)有不同的性能。?
- 何時(shí)使用專用數(shù)據(jù)庫(kù)、何時(shí)使用通用數(shù)據(jù)庫(kù)。?
2023年的數(shù)據(jù)庫(kù)格局?
在深入研究之前,不妨看一下當(dāng)前的數(shù)據(jù)庫(kù)生態(tài)系統(tǒng)以及各類數(shù)據(jù)庫(kù)的市場(chǎng)份額:?
如您所見,盡管NoSQL數(shù)據(jù)庫(kù)被大肆宣傳,但關(guān)系數(shù)據(jù)庫(kù)仍是最常用的數(shù)據(jù)庫(kù)類型。如果我們看看最近的趨勢(shì),排名告訴我們略有不同的情形。?
該圖顯示,在過(guò)去的兩年中,關(guān)系數(shù)據(jù)庫(kù)已被幾種不同類型的數(shù)據(jù)庫(kù)模型多少搶去了地盤。以下是一些正日益被開發(fā)人員采用的主要數(shù)據(jù)庫(kù)模型:?
- 文檔數(shù)據(jù)庫(kù)?
- 圖形數(shù)據(jù)庫(kù)?
- 時(shí)間序列數(shù)據(jù)庫(kù)?
- 列式數(shù)據(jù)庫(kù)?
- 內(nèi)存數(shù)據(jù)庫(kù)?
- 鍵-值數(shù)據(jù)庫(kù)?
- 搜索引擎數(shù)據(jù)庫(kù)?
什么讓數(shù)據(jù)庫(kù)有不同的性能??
談到數(shù)據(jù)庫(kù)性能,沒有什么神奇的因素使一種數(shù)據(jù)庫(kù)的性能優(yōu)于另一種數(shù)據(jù)庫(kù)。與計(jì)算機(jī)科學(xué)界的所有事情一樣,這歸結(jié)為讓企業(yè)可以針對(duì)特定用例優(yōu)化性能的權(quán)衡。具體就數(shù)據(jù)庫(kù)而言,CAP定理很好地介紹了為調(diào)優(yōu)性能而可能做出的一些權(quán)衡。?
比如在NoSQL數(shù)據(jù)庫(kù)的早期階段,其可擴(kuò)展性備受炒作,但代價(jià)通常是犧牲了標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)庫(kù)提供的數(shù)據(jù)一致性保證。?
會(huì)影響數(shù)據(jù)庫(kù)性能的其他一些設(shè)計(jì)因素,包括如下:?
- 磁盤端存儲(chǔ)格式——數(shù)據(jù)庫(kù)如何在硬盤驅(qū)動(dòng)器上實(shí)際存儲(chǔ)和組織數(shù)據(jù)對(duì)性能有重大影響。隨著更多的公司開始存儲(chǔ)用于分析工作負(fù)載的大量數(shù)據(jù),以Parquet等基于列的格式在磁盤上存儲(chǔ)數(shù)據(jù)越來(lái)越受歡迎。?
- 主索引數(shù)據(jù)結(jié)構(gòu)——數(shù)據(jù)庫(kù)如何索引數(shù)據(jù)也會(huì)對(duì)性能產(chǎn)生重大影響。數(shù)據(jù)庫(kù)通常有被存儲(chǔ)引擎使用的主索引,然后允許用戶定義輔助索引。簡(jiǎn)單來(lái)說(shuō),索引有助于提升讀取性能,但為寫入新數(shù)據(jù)點(diǎn)增加了開銷。?
- 數(shù)據(jù)壓縮——如何壓縮數(shù)據(jù)將會(huì)影響到存儲(chǔ)數(shù)據(jù)的成本以及數(shù)據(jù)庫(kù)的查詢性能。一些壓縮算法旨在盡可能減小數(shù)據(jù)的大小。其他算法的壓縮比可能較低,但在解壓縮數(shù)據(jù)時(shí)速度更快,這意味著您可以獲得更好的數(shù)據(jù)查詢性能。?
- 熱存儲(chǔ)和冷存儲(chǔ)——現(xiàn)在許多數(shù)據(jù)庫(kù)系統(tǒng)允許數(shù)據(jù)在更快速更昂貴的熱存儲(chǔ)和更緩慢更便宜的冷存儲(chǔ)之間移動(dòng)。從理論上說(shuō),這可以為頻繁查詢的數(shù)據(jù)提供更好的性能,并節(jié)省存儲(chǔ)成本,同時(shí)仍允許訪問(wèn)冷存儲(chǔ)中的數(shù)據(jù),而不是直接刪除。?
- 持久性/災(zāi)難恢復(fù)——數(shù)據(jù)庫(kù)如何處理災(zāi)難恢復(fù)對(duì)性能也有影響。設(shè)計(jì)數(shù)據(jù)庫(kù)以應(yīng)對(duì)各種故障通常會(huì)降低性能,因此對(duì)于一些用例(數(shù)據(jù)不是很關(guān)鍵,偶爾丟失數(shù)據(jù)點(diǎn)也沒關(guān)系)而言,數(shù)據(jù)庫(kù)可以擯棄一些安全保證以獲得更好的性能。?
所有這些因素以及本文未提到的許多其他因素都會(huì)影響數(shù)據(jù)庫(kù)的性能。通過(guò)調(diào)整這些因素,就可以針對(duì)非常具體的性能特征優(yōu)化數(shù)據(jù)庫(kù),犧牲某些方面實(shí)際上不會(huì)成為問(wèn)題,因?yàn)槟承┣闆r下不需要它們。?
何時(shí)為您的應(yīng)用系統(tǒng)使用專門的數(shù)據(jù)庫(kù)??
決定為您的應(yīng)用系統(tǒng)使用哪個(gè)數(shù)據(jù)庫(kù)牽涉很多因素。不妨看看為應(yīng)用系統(tǒng)選擇數(shù)據(jù)庫(kù)時(shí)需要考慮的幾個(gè)主要因素。?
- 數(shù)據(jù)訪問(wèn)模式?
選擇數(shù)據(jù)庫(kù)的主要因素是如何創(chuàng)建和使用應(yīng)用系統(tǒng)中的數(shù)據(jù)。最常見的入手途徑莫過(guò)于確定您的工作負(fù)載是在線分析處理(OLAP)還是在線事務(wù)處理(OLTP)。OLAP工作負(fù)載以分析為中心,與關(guān)系數(shù)據(jù)庫(kù)旨在處理的更為標(biāo)準(zhǔn)的OLTP工作負(fù)載相比,OLAP工作負(fù)載有不同的訪問(wèn)模式。OLAP查詢通常只觸及少數(shù)列來(lái)執(zhí)行計(jì)算,可以通過(guò)使用為此設(shè)計(jì)的列式數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化。舉例說(shuō),由于性能優(yōu)勢(shì),大多數(shù)數(shù)據(jù)倉(cāng)庫(kù)構(gòu)建在面向列的數(shù)據(jù)庫(kù)之上。?
一旦大致確定了工作負(fù)載的類型,現(xiàn)在就需要考慮查詢的延遲需求和寫入數(shù)據(jù)的頻率等方面。如果您的用例需要對(duì)監(jiān)測(cè)之類的任務(wù)進(jìn)行低延遲的近實(shí)時(shí)查詢,可以考慮使用時(shí)間序列數(shù)據(jù)庫(kù),這種數(shù)據(jù)庫(kù)旨在處理高寫入吞吐量,同時(shí)還允許在攝取數(shù)據(jù)后很快查詢數(shù)據(jù)。?
對(duì)于OLTP類型的工作負(fù)載而言,通常需要選擇關(guān)系數(shù)據(jù)庫(kù)還是文檔數(shù)據(jù)庫(kù)。這里的關(guān)鍵因素是查看數(shù)據(jù)模型,確定您是想要NoSQL文檔數(shù)據(jù)庫(kù)提供的模式靈活性,還是更喜歡關(guān)系數(shù)據(jù)庫(kù)提供的一致性保證。?
可能考慮的最后一點(diǎn)是,您是否預(yù)計(jì)工作負(fù)載在一天當(dāng)中相當(dāng)一致,還是會(huì)呈“突發(fā)式”,要求數(shù)據(jù)庫(kù)偶爾處理大得多的讀寫量。在后一種情況下,就有必要使用這種數(shù)據(jù)庫(kù):很容易擴(kuò)增或縮減硬件,這樣您不會(huì)因大多數(shù)時(shí)候不需要的硬件而面臨停運(yùn)或高昂成本。?
- 內(nèi)部知識(shí)?
在決定使用什么數(shù)據(jù)庫(kù)時(shí),應(yīng)該考慮到團(tuán)隊(duì)現(xiàn)有的技能組合。您需要確定使用專用數(shù)據(jù)庫(kù)的潛在好處是否值得為此投入資源來(lái)培訓(xùn)團(tuán)隊(duì)學(xué)習(xí)如何使用它,是否值得為了學(xué)習(xí)新技術(shù)而犧牲生產(chǎn)力。?
如果您知道所構(gòu)建的服務(wù)不需要針對(duì)性能全面優(yōu)化,可以使用團(tuán)隊(duì)最熟悉的數(shù)據(jù)庫(kù)來(lái)完成工作。另一方面,如果您知道性能很重要,克服采用新數(shù)據(jù)庫(kù)帶來(lái)的困難可能是值得的。?
- 架構(gòu)復(fù)雜性?
確保軟件架構(gòu)盡可能簡(jiǎn)單很理想,因此為系統(tǒng)添加另一個(gè)組件(比如新數(shù)據(jù)庫(kù))應(yīng)該與管理數(shù)據(jù)庫(kù)將給系統(tǒng)增添的額外復(fù)雜性進(jìn)行權(quán)衡。?
如果您的應(yīng)用系統(tǒng)非常適合專門的數(shù)據(jù)庫(kù),它可以充當(dāng)應(yīng)用系統(tǒng)數(shù)據(jù)的主數(shù)據(jù)庫(kù),那么這不是一個(gè)大問(wèn)題。另一方面,如果您將使用偏通用的數(shù)據(jù)庫(kù)作為應(yīng)用系統(tǒng)的主存儲(chǔ),那么為一小部分數(shù)據(jù)添加一種額外的數(shù)據(jù)庫(kù)可能不值得,除非您面臨嚴(yán)重的性能問(wèn)題。?
結(jié)論?
數(shù)據(jù)庫(kù)生態(tài)系統(tǒng)在迅速發(fā)展。雖然選擇自己熟知的數(shù)據(jù)庫(kù)始終是不錯(cuò)的選擇,但開發(fā)人員有必要密切關(guān)注一些新發(fā)布的技術(shù),看看它們是否適合自己構(gòu)建的系統(tǒng)。搭建一種專門的數(shù)據(jù)庫(kù)可以從許多方面幫助應(yīng)用系統(tǒng)取得成功,比如節(jié)省成本、為用戶提升性能、更容易擴(kuò)展以及提高開發(fā)人員的生產(chǎn)力。?
原文標(biāo)題:??How to Choose the Right Database in 2023??,作者:Charles Mahler?
鏈接:??https://thenewstack.io/how-to-choose-the-right-database-in-2023/???