數(shù)據(jù)庫存儲模型簡述
數(shù)據(jù)庫現(xiàn)在應(yīng)該是無人不知,無人不曉,講到數(shù)據(jù)庫必然要提到兩個人:
1. 一個是E.F. Codd,這個是理論的開創(chuàng)者,來瞻仰下:
埃德加·弗蘭克·科德(Edgar Frank Codd,1923-2003)是密執(zhí)安大學哲學博士,IBM公司研究員,被譽為“關(guān)系數(shù)據(jù)庫之父”,并因為在數(shù)據(jù)庫管理系統(tǒng)的理論和實踐方面的杰出貢獻于1981年獲圖靈獎。1970年,科德發(fā)表題為“大型共享數(shù)據(jù)庫的關(guān)系模型”的論文,文中***提出了數(shù)據(jù)庫的關(guān)系模型。由于關(guān)系模型簡單明了、具有堅實的數(shù)學理論基礎(chǔ),所以一經(jīng)推出就受到了學術(shù)界和產(chǎn)業(yè)界的高度重視和廣泛響應(yīng),并很快成為數(shù)據(jù)庫市場的主流。
2. 另外一個是Michael Stonebrake,獲得2015年圖領(lǐng)獎。這位大師就是實踐的代表,沒發(fā)表了幾篇論文,但是確實數(shù)據(jù)庫行業(yè)的開創(chuàng)者。
在1970年代前期,Michael Stonebraker就在Edgar Codd的關(guān)系數(shù)據(jù)庫論文啟發(fā)下,組織伯克利的師生,開始開發(fā)最早的兩個關(guān)系數(shù)據(jù)庫之一Ingres(另一個是IBM System R),Ingres的基礎(chǔ)上后來發(fā)展出Sybase和SQL Server兩大主流數(shù)據(jù)庫。Ingres在關(guān)系數(shù)據(jù)庫的查詢語言設(shè)計、查詢處理、存取方法、并發(fā)控制和查詢重寫等技術(shù)上都有重大貢獻。
1980年代他又開發(fā)了POSTGRES項目,目的是在關(guān)系數(shù)據(jù)庫之上增加對更復(fù)雜的數(shù)據(jù)類型的支持,包括對象、地理數(shù)據(jù)、時間序列數(shù)據(jù)等。后來這個系統(tǒng)演變?yōu)殚_源的PostgreSQL,Greenplum、Aster Data、Netezza和Stonebraker自己創(chuàng)辦的Ilustra(后被Informix收購)等多個商業(yè)公司和開源的產(chǎn)品都是基于PostgreSQL開發(fā)的。
1990年代,他啟動了聯(lián)邦數(shù)據(jù)庫Mariposa,基于此創(chuàng)辦了Cohera公司,后被PeopleSoft收購。Mariposa和稍早的XPRS(與Randy Katz、David Patterson和John Ousterhout諸位大牛合作)和Distributed Ingres兩個項目開了一代分布式數(shù)據(jù)庫風起之先。Shared Nothing架構(gòu)這一重要概念也是那個時期提出來的,這已經(jīng)成為如今大數(shù)據(jù)系統(tǒng)的基石之一。
3. 數(shù)據(jù)庫存儲模型分類和適合場景
按關(guān)系模型來組織和管理,存儲數(shù)據(jù),流行了30多年,最近這十年才因為數(shù)據(jù)量爆炸,為了保證性能,工業(yè)界在關(guān)系模型上做了一定的妥協(xié),針對不同的場景,采用不同的存儲方式,沒有完全遵守數(shù)據(jù)庫模型。類似redis這種的又是非關(guān)系型數(shù)據(jù)庫,這類技術(shù)被稱之為NoSQL,還有新出現(xiàn)的一類數(shù)據(jù)庫,NewSQL,NewSQL是不僅具有NoSQL對海量數(shù)據(jù)的存儲管理能力,還保持了傳統(tǒng)數(shù)據(jù)庫對ACID和SQL特性的支持。
NoSQL相對傳統(tǒng)數(shù)據(jù)庫是實踐的妥協(xié),為了實現(xiàn)高吞吐量,不支持ACID數(shù)據(jù)庫的設(shè)計范式。NoSQL沒有統(tǒng)一的查詢語言。
按照存儲模型來說分為以下4類。
- 列式存儲模型
- 文檔數(shù)據(jù)模型
- 鍵值數(shù)據(jù)模型
- 圖式數(shù)據(jù)模型
(1) 列式存儲模型
- 應(yīng)用場景:分布式數(shù)據(jù)存儲,在分布式文件系統(tǒng)上支持隨機讀寫的分布式數(shù)據(jù)存儲。
- 典型的產(chǎn)品:Hadoop/Hbase,Hypertable
- 數(shù)據(jù)模型:以“列”為中心進行存儲,將同一列數(shù)據(jù)存儲在一起。
- 優(yōu)點:快速查詢,高可擴展性,易于實現(xiàn)分布式擴展。
(2) 文檔數(shù)據(jù)模型
- 應(yīng)用場景:非強事務(wù)需求的web應(yīng)用。
- 典型的產(chǎn)品:MongoDB,Elasticsearch
- 數(shù)據(jù)模型:鍵值模型,存儲為文檔模型
- 優(yōu)點:數(shù)據(jù)模型無須事先定義,存儲很隨意。
(3) 鍵值數(shù)據(jù)模型
- 應(yīng)用場景:內(nèi)容緩存,用于大量的并行數(shù)據(jù)訪問的高負載場景。
- 典型的產(chǎn)品:Redis,DynamoDB,LevelDB
- 數(shù)據(jù)模型:基于哈希表實現(xiàn)的key-value
- 有點:查詢迅速,寫入迅速
- 缺點:數(shù)據(jù)沒有什么結(jié)構(gòu)
(4) 圖式數(shù)據(jù)模型
- 應(yīng)用場景:社交網(wǎng)絡(luò)、推薦系統(tǒng),關(guān)系圖譜(如陌陌的附近的人這樣的功能)
- 典型的產(chǎn)品:Neo4J
- 數(shù)據(jù)模型:圖式結(jié)構(gòu)
- 優(yōu)點:適用于圖式計算場景
【本文為51CTO專欄作者“大數(shù)據(jù)和云計算”的原創(chuàng)稿件,轉(zhuǎn)載請通過微信公眾號獲取聯(lián)系和授權(quán)】