五個(gè)常用數(shù)據(jù)庫:
1.關(guān)系數(shù)據(jù)庫
我們一直在使用關(guān)系型數(shù)據(jù),比如Oracle、MySQL、SQL Server、Postgress。保存到關(guān)系數(shù)據(jù)庫的數(shù)據(jù)必須滿足一定的要求。通俗地說,就是滿足一定的數(shù)據(jù)范式,比如主鍵、外鍵、數(shù)據(jù)冗余等。例如,學(xué)生信息可以保存在數(shù)據(jù)庫中,班級信息也可以保存在數(shù)據(jù)庫中。而且,一個(gè)班級包含很多學(xué)生,他們之間可以通過外鍵建立一對多的對應(yīng)關(guān)系。這些信息和關(guān)系可以通過關(guān)系數(shù)據(jù)庫來存儲(chǔ)。值得注意的是,關(guān)系數(shù)據(jù)庫需要預(yù)先定義其表結(jié)構(gòu),并且在存儲(chǔ)之前需要定義其相應(yīng)的數(shù)據(jù)類型或長度。一旦添加了新的屬性,就必須修改其表的結(jié)構(gòu)。傳統(tǒng)的關(guān)系數(shù)據(jù)庫實(shí)際上是行數(shù)據(jù)庫,逐行存儲(chǔ)信息。
2. 列數(shù)據(jù)庫
一般用來對應(yīng)大量的字符串?dāng)?shù)據(jù),如HBase、cassandra、Sybase IQ、HP Vertica、EMC Greenplum等。列數(shù)據(jù)庫從一開始就是為了大數(shù)據(jù)環(huán)境下數(shù)據(jù)倉庫的數(shù)據(jù)分析而開發(fā)的,主要是適用于批量數(shù)據(jù)處理和實(shí)時(shí)查詢。下面兩張圖形象地說明了什么是列式數(shù)據(jù)庫,什么是行式數(shù)據(jù)庫,以及兩者的區(qū)別。
3.鍵值數(shù)據(jù)庫
即Key-Value存儲(chǔ),簡稱KV存儲(chǔ)。它是NoSQL存儲(chǔ)的一種方式。其數(shù)據(jù)以鍵值對的形式組織、索引和存儲(chǔ)。 KV存儲(chǔ)非常適合不涉及太多數(shù)據(jù)關(guān)系的業(yè)務(wù)數(shù)據(jù)。同時(shí)可以有效減少磁盤讀寫次數(shù),比SQL數(shù)據(jù)庫存儲(chǔ)有更好的讀寫性能。典型產(chǎn)品包括:亞馬遜的DynamoDB、redis。
4.圖數(shù)據(jù)庫
圖數(shù)據(jù)庫并不是專門用來存儲(chǔ)圖形圖像的,而是因?yàn)樗褂妙愃茍D的結(jié)構(gòu)來維護(hù)其數(shù)據(jù)之間的關(guān)系,所以被稱為圖數(shù)據(jù)庫。 Neo4j和Sones是其典型代表。
在圖數(shù)據(jù)結(jié)構(gòu)中,只有兩種基本數(shù)據(jù)類型,即Node和Relationship。節(jié)點(diǎn)可以有屬性,關(guān)系也可以有屬性。屬性都是鍵值對的形式。存儲(chǔ)中,節(jié)點(diǎn)(Node)之間的連接是通過關(guān)系(Relationship)建立的,它們建立的關(guān)系是有方向的。
Neo4j 是一種高性能的NOSQL 圖形數(shù)據(jù)庫,它在網(wǎng)絡(luò)上而不是表中存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)。 Neo4j也可以被視為一個(gè)高性能的圖引擎,具有成熟數(shù)據(jù)庫的所有功能。程序員在面向?qū)ο蟮撵`活網(wǎng)絡(luò)結(jié)構(gòu)中工作,而不是在嚴(yán)格的靜態(tài)表中工作,但他們可以享受完全事務(wù)性企業(yè)級數(shù)據(jù)庫的所有好處。 Neo4j因其嵌入式、高性能、輕量級等優(yōu)點(diǎn)而受到越來越多的關(guān)注。支持幾乎所有主流開發(fā)語言。
5.分布式文檔存儲(chǔ)數(shù)據(jù)庫
無需定義,應(yīng)用靈活。文檔存儲(chǔ)支持對結(jié)構(gòu)化數(shù)據(jù)的訪問。與關(guān)系模型不同,文檔存儲(chǔ)沒有強(qiáng)制的架構(gòu)。與關(guān)系模型不同,文檔存儲(chǔ)模型支持嵌套結(jié)構(gòu)。例如,文檔存儲(chǔ)模型支持XML和JSON文檔,字段的值可以嵌套存儲(chǔ)其他文檔。文檔存儲(chǔ)模型還支持?jǐn)?shù)組和列值鍵。與鍵值存儲(chǔ)不同,文檔存儲(chǔ)關(guān)心文檔的內(nèi)部結(jié)構(gòu)。這使得存儲(chǔ)引擎可以直接支持二級索引,從而可以對任意字段進(jìn)行高效查詢。支持嵌套文檔存儲(chǔ)的能力使得查詢語言能夠搜索嵌套對象。 XQuery 就是一個(gè)例子。 MongoDB 通過支持在查詢中指定JSON 字段路徑來實(shí)現(xiàn)類似的功能。例如,CouchDB、MongoDB 等。