五大存儲模型關系模型、鍵值存儲、文檔存儲、列式存儲、圖形數據庫


也可以認為是五大數據庫存儲模型。

數據庫市場需要細分,行式數據庫不再滿足所有的需求,而有很多需求需要通過本內存數據庫和列式數據庫解決,列式數據庫在數據分析、海量存儲、BI這三個領域有自己獨到。

1. 關系型數據庫(行式數據庫) mysql sybase etc
定義:關系模型使用記錄(行或者元祖)進行存儲,記錄存儲在表中,表由架構界定。表中的每個列都有名稱和類型,表中的所有記錄都要符合表的定義。SQL是專門的查詢語言,提供相應的語法查找符合條件的記錄,如表聯接(Join)。表聯接可以基於表之間的關系在多表之間查詢記錄。

 

存儲格式:行式數據庫把一行中的數據值串在一起存儲起來,然后再存儲下一行的數據,以此類推。

例如以下的一個表:

EmpId Lastname Firstname Salary
1 Smith Joe 40000
2 Jones Mary 50000
3 Johnson Cathy 44000
1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;


特點:據以行相關的存儲體系架構進行空間分配,主要適合與小批量的數據處理,常用於聯機事務型數據處理。不能滿足后面三個需求:對數據庫高並發讀寫要求,對海量數據的高效率存儲和訪問需求,對數據庫高可擴展性和高可用性。 一句話不適合分布式、高並發和海量。


2. 列式存儲 Sybase IQ, C-Store, Vertica,
定義:什么是列式數據庫?列式數據庫是以列相關存儲架構進行數據存儲的數據庫。列式存儲以流的方式在列中存儲所有的數據,主要適合與批量數據處理和即席查詢。

存儲格式 :

列式數據庫把一列中的數據值串在一起存儲起來,然后再存儲下一列的數據,以此類推。

1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;
特點:包括查詢快,由於查詢需要讀取的blocks少;數據壓縮比高,正因為同一類型的列存儲在一起。Load快。 簡化數據建模的復雜性。但是插入更新慢,不太適合數據老是變化,它是按列存儲的。這時候你就知道它適做DSS(決策支持系統),BI的優秀選擇,數據集市,數據倉庫,它不適合OLTP。

Examples are Sybase IQ, C-Store, Vertica, VectorWise,MonetDB, ParAccel, and Infobright.

//具體請參考如下地址

http://en.wikipedia.org/wiki/Column-oriented_DBMS.


3. 鍵值存儲 cassandra, hbase, bigtable
即Key-Value存儲,簡稱KV存儲。它是NoSQL存儲的一種方式。它的數據按照鍵值對的形式進行組織,索引和存儲。KV存儲非常適合不涉及過多數據關系業務關系的業務數據,同時能有效減少讀寫磁盤的次數,比SQL數據庫存儲擁有更好的讀寫性能。

典型例子 Sorted String Table即SSTable。其實STL 庫中map和hash_map, JAVA中hash_table, hash_map就是鍵值存儲。 但是他們值只支持內存操作,而且map的查詢效率太低,關鍵是他們只是簡單的數據結構,不能實現較大規模存儲和分布式,而且數據的修改效率比較低。 而SSTalbe就解決了這些問題。

鍵值存儲實際是分布式表格系統的一種。

其中的實現機制也可以參考

LevelDB/Sstable: http://blog.chinaunix.net/uid-26111972-id-3342215.html.

LevelDB: http://www.samecity.com/blog/Index.asp?SortID=12

分布式key-value 系統有cassandra, hbase, bigtable etc

http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

4. 文檔存儲
文檔存儲支持對結構化數據的訪問,不同於關系模型的是,文檔存儲 沒有強制的架構。

事實上,文檔存儲以封包鍵值對的方式進行存儲。在這種情況下,應用對要檢索的封包采取一些約定,或者利用存儲引擎的能力將不同的文檔划分成不同的集合,以管理數據。

與關系模型不同的是,文檔存儲模型支持嵌套結構。例如,文檔存儲模型支持XML和JSON文檔,字段的“值”又可以嵌套存儲其它文檔。文檔存儲模型也支持數組和列值鍵。

與鍵值存儲不同的是,文檔存儲關心文檔的內部結構。這使得存儲引擎可以直接支持二級索引,從而允許對任意字段進行高效查詢。支持文檔嵌套存儲的能力,使得查詢語言具有搜索嵌套對象的能力,XQuery就是一個例子。MongoDB通過支持在查詢中指定JSON字段路徑實現類似的功能。

MongoDB 對SQL 和ACID 支持的比較全面的數據庫了。不過, 比較多的還是介紹日志的采集和存儲,小文件的分布式存儲,類似互聯網微博應用的數據存儲等方面的內容。

MongoDB 和 Cassandra的比較:
http://www.csdn.net/article/2013-08-23/2816679-time-series-data-mongdb-vs-cassandra

5.圖形數據庫

圖形數據庫存儲頂點和邊的信息,有的支持添加注釋。

圖形數據庫可用於對事物建模,如社交圖譜、真實世界的各種對象。IMDB(Internet MovieDatabase)站點的內容就組成了一幅復雜的圖像,演員與電影彼此交織在一起。

圖形數據庫的查詢語言一般用於查找圖形中斷點的路徑,或端點之間路徑的屬性。Neo4j是一個典型的圖形數據庫。
————————————————
版權聲明:本文為CSDN博主「dellme99」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/dellme99/article/details/16968979


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM