一、NoSQL的簡介
NoSQL比關(guān)系型數(shù)據(jù)庫性能高數(shù)倍。NoSQL憑借 “易擴(kuò)展、大數(shù)據(jù)、高可用、高性能、靈活性”特點(diǎn)強(qiáng)勢引領(lǐng)全場。CP型分布式數(shù)據(jù)庫,能夠保證數(shù)據(jù)的強(qiáng)一致性和分區(qū)容忍性。
二、NoSQL的常用種類
1、mongodb
優(yōu)點(diǎn):MongoDB最大的特點(diǎn)是表結(jié)構(gòu)靈活可變,字段類型可以隨時(shí)修改。MongoDB是高性能、無模式的文檔型數(shù)據(jù)庫,文件存儲格式為BSON(二進(jìn)制格式的JSON),
支持二級索引,在事務(wù)、復(fù)雜查詢應(yīng)用下無法取代關(guān)系型數(shù)據(jù)庫。支持相比于HBase更復(fù)雜的集合查找。
簡而言之,往MySQL寫數(shù)據(jù)像是在做填空題,你寫入的數(shù)據(jù)必須與最早定義的表結(jié)構(gòu)一致,而往MongoDB寫數(shù)據(jù)就像是在做問答題,想怎么寫就怎么寫,這靈活度不要爽太多。
缺點(diǎn):比較消耗內(nèi)存,有事務(wù)、join(全外連接)等短板。因此,如果你的數(shù)據(jù)的邏輯結(jié)構(gòu)非常復(fù)雜,經(jīng)常需要進(jìn)行復(fù)雜的多表查詢或者事務(wù)操作,那顯然還是MySQL這類關(guān)系型數(shù)據(jù)庫更合適。
使用場景:得益于MongoDB的這些特點(diǎn),MongoDB很適合那些表結(jié)構(gòu)經(jīng)常改變,數(shù)據(jù)的邏輯結(jié)構(gòu)沒又沒那么復(fù)雜不需要多表查詢操作,數(shù)據(jù)量又比較大的應(yīng)用場景。
2、redis
Redis是現(xiàn)在最熱門的key-value數(shù)據(jù)庫,是內(nèi)存亦可持久化的日志型,讀寫性能最強(qiáng)。提供五種數(shù)據(jù)類型:String,hash,list,set及zset(sorted set)。
適合存儲全局變量和高效的分布式緩存。當(dāng)內(nèi)存達(dá)到一定的閾值,數(shù)據(jù)可以定時(shí)持久化到硬盤中。
優(yōu)點(diǎn):Redis的最大特點(diǎn)當(dāng)然就是key-value存儲所帶來的簡單和高性能了。適合讀多寫少的業(yè)務(wù)場景,支持操作原子性。
缺點(diǎn):不支持二級索引。也不適合做存儲和分析。因此Redis無法提供常規(guī)數(shù)據(jù)庫所具備的多列查詢、區(qū)段查詢等復(fù)雜查詢功能。
同時(shí),由于Redis需要把數(shù)據(jù)存在內(nèi)存中,因此數(shù)據(jù)量要小于HBase與MongoDB。
應(yīng)用場景:Redis犧牲了常規(guī)數(shù)據(jù)庫中的數(shù)據(jù)表、復(fù)雜查詢等功能,換來了很大的性能提升,特別適合那些對讀寫性能要求極高,且數(shù)據(jù)表結(jié)構(gòu)簡單(key-value、list、set之類)、查詢條件也同樣簡單的應(yīng)用場景。
如果你的數(shù)據(jù)表結(jié)構(gòu)還挺復(fù)雜,你還經(jīng)常需要做一些復(fù)雜查詢操作,那你最好還是老老實(shí)實(shí)用MongoDB或者SQL吧。
3、Hbase
HBase是Hadoop項(xiàng)目的一部分,HBase列式數(shù)據(jù)庫,BigTable的一種實(shí)現(xiàn)。高效存儲大量數(shù)據(jù),支持列壓縮,行事務(wù)。適合Schema-less的數(shù)據(jù),
適合稀疏表,一個(gè)表可以容納上億行、上百萬列,用做超大數(shù)據(jù)量要求擴(kuò)展簡單的離線分析型應(yīng)用。Hadoop的無縫集成,有數(shù)據(jù)可靠性和海量數(shù)據(jù)分析性能(MapReduce)的能力。
優(yōu)點(diǎn):HBase也繼承了Hadoop項(xiàng)目的最大優(yōu)點(diǎn),那就是對海量數(shù)據(jù)的支持,以及極強(qiáng)的橫向(存儲容量)擴(kuò)展能力。
缺點(diǎn):HBase的列式存儲特性帶來了海量數(shù)據(jù)規(guī)模的支持和極強(qiáng)的擴(kuò)展能力,但是也給數(shù)據(jù)的讀取帶來很大的局限。
由于只有同一列族的數(shù)據(jù)才會被存放在一起,而且所有的查詢都必須要依賴Key,這就使得很多復(fù)雜查詢難以進(jìn)行。
應(yīng)用場景:作為MapReduce(大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算)的后臺數(shù)據(jù)源;Facebook的消息類應(yīng)用,包括Messages、Chats、Emails和SMS系統(tǒng),用的都是HBase。
綜上所述:
如果你對數(shù)據(jù)的讀寫要求極高,并且你的數(shù)據(jù)規(guī)模不大,也不需要長期存儲,選redis;
如果你的數(shù)據(jù)規(guī)模較大,對數(shù)據(jù)的讀性能要求很高,數(shù)據(jù)表的結(jié)構(gòu)需要經(jīng)常變,有時(shí)還需要做一些聚合查詢,選MongoDB;
如果你需要存儲海量數(shù)據(jù),連你自己都不知道你的數(shù)據(jù)規(guī)模將來會增長多么大,那么選HBase。



