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









