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