云數據庫選型必讀:如何梳理需求?
自上世紀80年代以來,數據庫已取得了長足的進展,早期數據庫僅在大型機上運行,用戶只能在網狀數據庫(CODASYL)和關系數據庫之間進行選擇。網狀數據庫的速度往往比關系數據庫快一倍,但最終計算機硬件方面的改進和SQL查詢的便利性(相對編寫導航型數據庫代碼)促使關系數據庫占據市場主要位置。
現在,數據庫可以在任何地方運行,從智能手機、數據中心的服務器,到地域分散的云環境。除了關系表格數據庫以外,還有面向時間序列、圖、空間、文本、聯機分析處理(OLAP)、XML和JSON等數據的數據庫。一些數據庫專門處理某一種數據,一些數據庫允許用戶選擇數據類型,但每次只處理一種;一些數據庫允許多種類型的數據共存于同一數據庫實例中,一些數據庫擅長聯機事務處理(OLTP),一些數據庫主攻聯機分析處理(OLAP),還有一些數據庫適合處理事務和分析混合工作負載。
我們將討論的一些數據庫可以在本地運行,一些數據庫專門支持云環境,但與本地數據庫兼容;一些數據庫是"云原生",這意味著它們只能從云提供商處獲得。
確定數據庫需求
數據庫本身幾乎從來不是獨立存在的。相反,數據庫通常是應用系統的后端或存儲層。
如果該應用是遍布全球的多人玩的視頻游戲,那么讀取延遲和寫入延遲都很重要,數據庫可能需要分布式,不過不一定是關系型的,也不一定要有強一致性;鍵值數據庫可能很理想。如果該應用記錄和監測來自閥門的傳感器輸出,數據庫應該能夠快速寫入大量的時間序列數據。
你會生成多少數據?生成數據有多快?
幾乎任何云數據庫都可以處理少量的數據(數GB或更少),一些云數據庫可以在內存中處理這些數據,許多云數據庫可以處理數TB(數千GB)的數據,只有少數可以支持數PB(數百萬GB)的數據。請注意,大多數云數據庫按月收取存儲費,SSD存儲方面的費用高于磁盤存儲。
數據到達的速度會給其他指標帶來壓力,比如數據庫寫入速度和網絡容量。如果大量數據突然到達,數據庫或前端程序在將數據寫入到永久存儲設備時可能需要將數據緩存在內存中,以免數據丟失。人們常提到的Redis(一種內存中數據結構存儲,用作數據庫、緩存和消息代理)能夠為其他數據庫緩存大量突發數據。
你預先知道數據庫模式嗎?
如果你的數據庫模式(數據的結構)是預先確定的,不太可能隨時間的推移而發生顯著變化,如果你希望大多數字段面對不同的記錄有一致的類型,那么SQL數據庫是不錯的選擇。否則,NoSQL數據庫可能更適合你的應用。
不過也有例外。比如說,Rockset這種操作型數據庫允許SQL查詢,無需要求它所導入的數據有固定模式或一致類型。
哪種形狀適合你的數據?
關系SQL數據庫將強類型數據存儲在擁有行和列的矩形表中,比如Microsoft SQL Server、PostgreSQL和MySQL。它們依賴表與表之間的定義關系,使用索引加快選定的查詢,并使用JOINS一次查詢多個表。許多現代關系數據庫(包括Oracle Database)也支持其他形狀。
文檔數據庫通常存儲可能包含數組和嵌套文檔的弱類型JSON(文本或二進制),比如MongoDB和Couchbase。圖數據庫存儲具有屬性的頂點和邊,比如Neo4j,或者存儲RDF三元組,比如AllegroGraph。無論是哪種實現方法,圖數據庫都強調實體之間的聯系。其他類別的NoSQL數據庫包括鍵值數據庫(比如 RocksDB)和列式存儲數據庫(比如Cassandra)。
有時,數據以一種適用于分析的形狀被獲取,有時并非如此,因此需要進行轉換。有時一種數據庫建立在另一種數據庫上。比如說,鍵值存儲數據庫幾乎可以用作任何類型的數據庫的基礎。
你的延遲要求是什么?
延遲是指數據庫的響應時間和應用系統的端到端響應時間。在理想情況下,每個用戶操作的響應時間都在亞秒級,這常常意味著需要數據庫在100毫秒內為每個簡單事務做出響應。分析查詢常常需要幾秒鐘甚至幾分鐘,應用系統可以通過在后臺運行復雜的查詢來維持響應時間。
云端運行數據庫會使延遲的測量很復雜。這里涉及多個因素:最簡單的考量因素是客戶端和數據庫之間的延遲,因數據庫查詢響應而增加了總體延遲。一個更復雜的考量因素是,在分布式數據庫中提交事務可能需要等待地理分布區域中的寫入,尤其是在數據庫保持強一致性的情況下。
作者:Martin Heller現為《InfoWorld》網站的特約編輯兼評論員,此前擔任Web和Windows編程顧問。從1986年至2010年,Heller一直從事數據庫、軟件和網站的開發工作。近期,他出任Alpha Software的技術和教育副總裁,還是Tubifi的主席兼首席執行官。
原文網址:https://www.infoworld.com/article/
3627792/how-to-choose-a-cloud-database.html