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

親吻昨日的陽光發表於2015-04-29
/**************************************************************/
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優勢。
優點:查詢速度快、可擴充套件性強、更容易進行分散式擴充套件
不足:功能相對侷限
資料模型:以列族式儲存,將同一列資料存在一起
典型應用:分散式檔案系統
特點:顧名思義,是按列儲存資料的。最大的特點是方便儲存結構化和半結構化資料,方便做資料壓縮,對針對某一列或者某幾列的查詢有非常大的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的資料庫的簡短描述和比較將在後續上傳

相關文章