天天看點

你印象中似知非知的NOSQL資料庫

/**************************************************************/

nosql産生原因:

nosql,泛指非關系型的資料庫。随着網際網路web2.0網站的興起,傳統的關系資料庫在應付web2.0網站,特别是超大規模和高并發的sns類型的web2.0純動态網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的資料庫則由于其本身的特點得到了非常迅速的發展。nosql資料庫的産生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難題。

nosql是什麼?

nosql(nosql = not only sql ),意即“不僅僅是sql”,是一項全新的資料庫革命性運動,早期就有人提出。nosql的擁護者們提倡運用非關系型的資料存儲,相對于鋪天蓋地的關系型資料庫運用,這一概念無疑是一種全新的思維的注入。

nosql的适用場景

nosql資料庫在以下的這幾種情況下比較适用:

1、資料模型比較簡單; 2、需要靈活性更強的it系統; 3、對資料庫性能要求較高; 4、不需要高度的資料一緻性; 5、對于給定key,比較容易映射複雜值的環境。

nosql的優點:

1.易擴充

nosql資料庫種類繁多,但是一個共同的特點都是去掉關系資料庫的關系型特性。資料之間無關系,這樣就非常容易擴充。也無形之間,在架構的層面上帶來了可擴充的能力。

2.大資料量,高性能

nosql資料庫都具有非常高的讀寫性能,尤其在大資料量下,同樣表現優秀。這得益于它的無關系性,資料庫的結構簡單。一般mysql使用query cache,每次表的更新cache就失效,是一種大粒度的cache,在針對web2.0的互動頻繁的應用,cache性能不高。而nosql的cache是記錄級的,是一種細粒度的cache,是以nosql在這個層面上來說就要性能高很多了。

3.靈活的資料類型

nosql無需事先為要存儲的資料建立字段,随時可以存儲自定義的資料格式。而在關系資料庫裡,增删字段是一件非常麻煩的事情。如果是非常大資料量的表,增加字段簡直就是一個噩夢。這點在大資料量的web2.0時代尤其明顯。

4.高可用

nosql在不太影響性能的情況,就可以友善的實作高可用的架構。比如cassandra,hbase模型,通過複制模型也能實作高可用。

nosql的缺點:

1. 不提供對sql的支援:如果不支援sql這樣的工業标準,将會對使用者産生一定的學習和應用遷移成本; 2. 支援的特性不夠豐富:現有産品所提供的功能都比較有限,大多數nosql資料庫都不支援事務,也不像mysql和oracle那樣能提供各種附加功能,比如bi和報表等; 3. 現有産品的不夠成熟:大多數産品都還處于初創期,和關系型資料庫幾十年的完善不可同日而語;

nosql的分類:

1.key-value存儲

代表:berkeley db、hibari、leveldb、memcachedb、redis、tair、dynamodb 特點:可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(redis包含了其他功能) 優點:快速查詢 不足:存儲資料缺少結構化 資料模型:一系列鍵值對 典型應用:内容緩存、适合混合工作負載并擴充大的資料集

2.列式存儲

 代表:hbase、cassandra、hypertable、gbase、tera 特點:顧名思義,是按列存儲資料的。最大的特點是友善存儲結構化和半結構化資料,友善做資料壓縮,對針對某一列或者某幾列的查詢有非常大的io優勢。 優點:查找速度快、可擴充性強、更容易進行分布式擴充 不足:功能相對局限 資料模型:以列族式存儲,将同一列資料存在一起 典型應用:分布式檔案系統

3.文檔存儲

代表:mongodb、couchdb、couchbase、ejdb、marklogic、sequoiadb、simpledb 特點:文檔存儲一般用類似json的格式存儲,存儲的内容是文檔型的。這樣也就有有機會對某些字段建立索引,實作關系資料庫的某些功能。 優點:資料結構要求不嚴格 不足:查詢性能不高,而且缺乏統一的查詢文法 典型應用:web應用

4.圖存儲

代表:cayley、neo4j 特點:圖形關系的最佳存儲。使用傳統關系資料庫來解決的話性能低下,而且設計使用不友善。 優點:利用圖結構相關算法 不足:需要對整個圖做計算才能得出結果,不容易做分布式的叢集方案。 資料模型:圖結構 典型應用:社交網絡、推薦系統等,專注于建構關系圖譜

5.對象存儲

代表:db4o、versant 特點:通過類似面向對象語言的文法操作資料庫,通過對象的方式存取資料。 優點:高性能、易嵌入、零管理。db4o 的 drs(db4o replication system)可實作 db4o 與關系型資料庫的雙向同步(複制)

6.xml資料庫

代表:basex、sedna 特點:高效的存儲xml資料,并支援xml的内部查詢文法,比如xquery,xpath。 優點:提供了高效的 xpath 和 xquery 的實作,有前端界面.基于 acid 安全事務、使用者和密碼管理、事務日志等.更能支援大型xml文檔的存儲 不足:在大量資料存儲時不如其他類型資料庫高效 資料模型:xml文檔

目前多數将nosql分為前四類

nosql産品:

     accumulo(key-value型) arangodb  (文檔型) aerospike (key-value型) basex (xml型) beansdb (簡化版的dynamo) berkeley db (key-value型) cassandra (key-value型)(列存儲) cayley  (graph型) couchbase (couchbase = couchdb + membase)(文檔型) couchdb (文檔型) db4o (面向對象型) dynamodb (key-value型) ejdb (文檔型) fatdb (key-value型) flare (key-value型) foundationdb  (key-value型) forestdb  (key-value型) galaxy (高性能記憶體資料庫網格 ) gbase 8a (列存儲)(國産->南大通用資料技術有限公司) handlersocket (日本,以mysql插件形式運作) hbase (列式存儲) hibari (key-value型) hyperleveldb  (改進自leveldb)(key-value型) hypertable (列式存儲) infinitegraph (graph型) ipage (基于檔案)(key-value型)(java lib) jackrabbit (文檔型) keyspace  (key-value型) ledisdb  (基于leveldb,類似redis)(key-value型) leveldb  (key-value型) litedb  (嵌入式)(文檔型) marklogic (文檔型) mapdb (嵌入式java資料庫引擎) maxtable (高性能、可擴充的、pb級海量資料處理系統) memcached (key-value型) memcachedb  (key-value型)給memcached分布式緩存伺服器添加了berkeley db的持久化存儲機制和異步主輔複制機制 memlink (key-value型) mongodb (文檔型) neo4j (graph型) nessdb (key-value型) oceanbase (分布式關系資料庫)(阿裡開發現已經用于淘寶和支付寶) oracle nosql database(key-value型) orient db (文檔型) pouchdb (最便攜的couchdb)(文檔型) ravendb (文檔型) redis (key-value型) rethinkdb ( json 文檔型) riak (key-value型) rocksdb (基于leveldb)(key-value型) sedna (xml型) sequoiadb(文檔型)(國産->第一個商用nosql資料庫) simpledb (文檔型) ssdb (基于leveldb,替代 redis)(key-value型) tair(key-value型)(國産-> 淘寶開發) tera (使用了bigtable的資料模型)(列式存儲) tiger (key-value型) tomp2p  (key-value型) tokyo cabinet/tokyo tyant  (key-value型) treapdb  (key-value型) unqlite  (嵌入式)(文檔型)(key-value型) versant (面向對象型) voldemort (key-value型) whitedb (輕量級 nosql ) xuncache (key-value型)

nosql的總結暫時先寫到這裡,對每個nosql的資料庫的簡短描述和比較将在後續上傳