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