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