傳統(tǒng)“關(guān)系型數(shù)據(jù)庫”在應(yīng)付互聯(lián)網(wǎng)WEB2.0應(yīng)用已顯示的力不從心,由其是超大規(guī)模和高并發(fā)的SNS類型的WEB2.0網(wǎng)站。主要需要應(yīng)對以下三方面難題:
1、對數(shù)據(jù)庫高并發(fā)讀寫的要求。
2、對數(shù)據(jù)庫高可擴(kuò)展性和高可用性的要求。
3、對海量數(shù)據(jù)高效存儲和訪問的要求。
”關(guān)系型數(shù)據(jù)庫“固有的特性的確用處不大
1、對數(shù)據(jù)庫事務(wù)一致性要求低。很多WEB應(yīng)用不要求嚴(yán)格的數(shù)據(jù)庫事務(wù),有些對讀一致性要求不高,更有些對寫一致性也要求不高。
2、對數(shù)據(jù)庫寫實時性和讀實時性要求低。如發(fā)送消息給訂閱者,可以接受延遲。
3、對復(fù)雜SQL查詢的要求低。如非常忌諱多張大表關(guān)聯(lián)查詢。
為了解決以上問題,”非關(guān)系型數(shù)據(jù)庫“(NoSql -- not only SQL)應(yīng)運而生,再很短的時間內(nèi)涌現(xiàn)出眾多的NoSQL產(chǎn)品。他們各有各的適用場景,你是否對這些特性有所了解?你是否在選型時一片茫然? 本文將解答你的疑惑,幫助你選擇正確的NoSQL產(chǎn)品,讓你少走些彎路。
NoSQL數(shù)據(jù)庫分類:
1、key-value存儲型--滿足極高讀寫要求。
2、文檔存儲型--海量存儲和訪問的數(shù)據(jù)庫。
3、列存儲型--高可擴(kuò)展性,可用性,面向分布式計算的數(shù)據(jù)庫。
4、圖存儲型--適合存儲關(guān)系
類型 | 部分代表 | 特點 |
列存儲 | Hbase Cassandra Hypertable | 顧名思義,是按列存儲數(shù)據(jù)的。最大的特點是方便存儲結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮,對針對某一列或者某幾列的查詢有非常大的IO優(yōu)勢。 |
文檔存儲 | MongoDB CouchDB | 文檔存儲一般用類似json的格式存儲,存儲的內(nèi)容是文檔型的。這樣也就有有機(jī)會對某些字段建立索引,實現(xiàn)關(guān)系數(shù)據(jù)庫的某些功能。 |
key-value存儲 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis | 可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能) |
圖存儲 | Neo4J FlockDB InfoGrid | 圖形關(guān)系的最佳存儲。使用傳統(tǒng)關(guān)系數(shù)據(jù)庫來解決的話性能低下,而且設(shè)計使用不方便。 |
對象存儲 | db4o Versant | 通過類似面向?qū)ο笳Z言的語法操作數(shù)據(jù)庫,通過對象的方式存取數(shù)據(jù)。 |
xml數(shù)據(jù)庫 | Berkeley DB XML BaseX | 高效的存儲XML數(shù)據(jù),并支持XML的內(nèi)部查詢語法,比如XQuery,Xpath。 |