淺談關(guān)系型與非關(guān)系型數(shù)據(jù)庫
當(dāng)你做一個網(wǎng)站時,某些數(shù)據(jù)可能需要進行***性存儲,此時,我們通常將引入數(shù)據(jù)庫對數(shù)據(jù)***性存儲。
那么,
什么是數(shù)據(jù)庫?
數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的建立在計算機存儲設(shè)備上的倉庫。
數(shù)據(jù)庫如何分類?
數(shù)據(jù)庫通常分為層次式數(shù)據(jù)庫、網(wǎng)絡(luò)式數(shù)據(jù)庫和關(guān)系式數(shù)據(jù)庫三種。而不同的數(shù)據(jù)庫是按不同的數(shù)據(jù)結(jié)構(gòu)來聯(lián)系和組織的。在當(dāng)今的互聯(lián)網(wǎng)中,最常見的數(shù)據(jù)庫模型主要是兩種,即關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。
關(guān)系型數(shù)據(jù)庫比較
非關(guān)系型數(shù)據(jù)庫比較
下面看看非關(guān)系型數(shù)據(jù)庫的特性
Neo4j
是一個高性能的 NoSQL 圖形數(shù)據(jù)庫,把數(shù)據(jù)保存為圖中的節(jié)點以及節(jié)點之間的關(guān)系。Neo4j 中兩個最基本的概念是節(jié)點和邊
節(jié)點表示實體,邊則表示實體之間的關(guān)系。節(jié)點和邊都可以有自己的屬性,不同實體通過各種不同的關(guān)系關(guān)聯(lián)起來,形成復(fù)雜的對象圖。
Neo4j 提供了在對象圖上進行查找和遍歷的功能:深度搜索、廣度搜索。
特點:
完整的ACID支持;高可用性;輕易擴展到上億級別的節(jié)點和關(guān)系;通過遍歷工具高速檢索數(shù)據(jù);屬性是由Key-Value鍵值對組成。
應(yīng)用:社交網(wǎng)絡(luò),歌曲信息,狀態(tài)圖
Hbase
列式存儲以流的方式在列中存儲所有的數(shù)據(jù)。對于任何記錄,索引都可以快速地獲取列上的數(shù)據(jù);列式存儲支持行檢索,但這需要從每個列獲取匹配的列值,并重新組成行。
HBase(Hadoop Database)是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng),利用HBase技術(shù)可在廉價PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲集群。
HBase是Google BigTable的開源實現(xiàn),模仿并提供了基于Google文件系統(tǒng)的BigTable數(shù)據(jù)庫的所有功能。HBase可以直接使用本地文件系統(tǒng)或者Hadoop作為數(shù)據(jù)存儲方式,不過為了提高數(shù)據(jù)可靠性和系統(tǒng)的健壯性,發(fā)揮HBase處理大數(shù)據(jù)量等功能,需要使用Hadoop作為文件系統(tǒng)。HBase僅能通過主鍵(row key)和主鍵的range來檢索數(shù)據(jù),僅支持單行事務(wù),主要用來存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。
Hbase中表的特點:大,稀疏,面向列
MongodDB
一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng),為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。MongoDB 將數(shù)據(jù)存儲為一個文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key value)對組成。
特點:
面向集合存儲,易存儲對象類型的數(shù)據(jù);模式自由;支持動態(tài)查詢;支持完全索引,包含內(nèi)部對象;支持查詢;支持復(fù)制和故障恢復(fù);使用高效的二進制數(shù)據(jù)存儲,包括大型對象(如視頻);自動處理碎片,以支持云計算層次的擴展性;支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言;文件存儲格式為BSON(一種JSON的擴展);可通過網(wǎng)絡(luò)訪問。
適用場景:網(wǎng)站數(shù)據(jù);緩存;大尺寸,低價值的數(shù)據(jù);高伸縮性的場景;用于對象及JSON 數(shù)據(jù)的存儲。
不適用場景:高度事務(wù)性的系統(tǒng);傳統(tǒng)的商業(yè)智能應(yīng)用;需要SQL 的問題。
Redis
Redis是一個key-value存儲系統(tǒng),key為字符串類型,只能通過key對value進行操作,支持的數(shù)據(jù)類型包括string、list、set、zset(有序集合)和hash。Redis支持主從同步,數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步。
Redis事務(wù)允許一組命令在單一步驟中執(zhí)行。事務(wù)有兩個屬性:在一個事務(wù)中的所有命令作為單個獨立的操作順序執(zhí)行;Redis事務(wù)是原子的,原子意味著要么所有的命令都執(zhí)行,要么都不執(zhí)行。
Redis 事務(wù)由指令 MULTI 發(fā)起的,之后傳遞需要在事務(wù)中和整個事務(wù)中,***由 EXEC 命令執(zhí)行所有命令的列表。
舉個荔枝
假設(shè)我們用關(guān)系型數(shù)據(jù)設(shè)計出以下學(xué)生選課的數(shù)據(jù)庫
Neo4j
Hbase
Mongodb
Redis
對比一下優(yōu)點缺點
NewSQL
是對各種新的可擴展/高性能數(shù)據(jù)庫的簡稱。具有NoSQL對海量數(shù)據(jù)的存儲管理能力,保持了傳統(tǒng)數(shù)據(jù)庫支持ACID和SQL等特性。
NewSQL共同特點:支持關(guān)系數(shù)據(jù)模型;使用SQL作為其主要的接口。