現(xiàn)在,NoSQL 數(shù)據(jù)庫(kù)變得越來(lái)越流行,我在這里總結(jié)出了一些非常棒的、免費(fèi)且開源的 NoSQL 數(shù)據(jù)庫(kù)。在這些數(shù)據(jù)庫(kù)中,MongoDB 獨(dú)占鰲頭,擁有相當(dāng)大的使用量。這些免費(fèi)且開源的 NoSQL 數(shù)據(jù)庫(kù)具有很好的可伸縮性與靈活性,非常適合于大數(shù)據(jù)存儲(chǔ)與處理。相較于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),這些 NoSQL 數(shù)據(jù)庫(kù)在性能上具有很大的優(yōu)勢(shì)。
然而,這些 NoSQL 數(shù)據(jù)庫(kù)未必最適合你。大多數(shù)常見的應(yīng)用仍然可以使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行開發(fā)。NoSQL 數(shù)據(jù)庫(kù)依然不太適合于那些任務(wù)關(guān)鍵型的事務(wù)要求。我對(duì)這些數(shù)據(jù)庫(kù)進(jìn)行了一些簡(jiǎn)單介紹,下面就來(lái)看看。
1. MongoDB
MongoDB 是個(gè)面向文檔的數(shù)據(jù)庫(kù),使用 JSON 風(fēng)格的數(shù)據(jù)格式。它非常適合于網(wǎng)站的數(shù)據(jù)存儲(chǔ)、內(nèi)容管理與緩存應(yīng)用,并且通過(guò)配置可以實(shí)現(xiàn)復(fù)制與高可用性功能。
MongoDB 具有很強(qiáng)的可伸縮性,性能表現(xiàn)優(yōu)異。它使用 C++ 編寫,基于文檔存儲(chǔ)。此外,MongoDB 還支持全文檢索、跨 WAN 與 LAN 的高可用性、易于實(shí)現(xiàn)的復(fù)制、水平擴(kuò)展、基于文檔的豐富查詢、在數(shù)據(jù)處理與聚合等方面具有很強(qiáng)的靈活性。
2. Cassandra
這是個(gè) Apache 軟件基金會(huì)的項(xiàng)目,Cassandra 是個(gè)分布式數(shù)據(jù)庫(kù),支持分散的數(shù)據(jù)存儲(chǔ),可以實(shí)現(xiàn)容錯(cuò)以及無(wú)單點(diǎn)故障等。換句話說(shuō),“Cassandra 非常適合于那些無(wú)法忍受數(shù)據(jù)丟失的應(yīng)用”。
3. CouchDB
這也是 Apache 軟件基金會(huì)的一個(gè)項(xiàng)目,CouchDB 是另一個(gè)面向文檔的數(shù)據(jù)庫(kù),以 JSON 格式存儲(chǔ)數(shù)據(jù)。它兼容于 ACID,像 MongoDB 一樣,CouchDB 也可以用于存儲(chǔ)網(wǎng)站的數(shù)據(jù)與內(nèi)容,以及提供緩存等。你可以通過(guò) JavaScript 在 CouchDB 上運(yùn)行 MapReduce 查詢。此外,CouchDB 還提供了一個(gè)非常方便的基于 Web 的管理控制臺(tái)。它非常適合于 Web 應(yīng)用。
4. Hypertable
Hypertable 模仿的是 Google 的 BigTable 數(shù)據(jù)庫(kù)系統(tǒng)。Hypertable 的創(chuàng)建者將“成為高可用、PB 規(guī)模的數(shù)據(jù)庫(kù)開源標(biāo)準(zhǔn)”作為 Hypertable 的目標(biāo)。換言之,Hypertable 的設(shè)計(jì)目標(biāo)是跨越多個(gè)廉價(jià)的服務(wù)器可靠地存儲(chǔ)大量數(shù)據(jù)。
5. Redis
這是個(gè)開源、高級(jí)的鍵值存儲(chǔ)。由于在鍵中使用了 hash、set、string、sorted set 及 list,因此 Redis 也稱作數(shù)據(jù)結(jié)構(gòu)服務(wù)器。這個(gè)系統(tǒng)可以幫助你執(zhí)行原子操作,比如說(shuō)增加 hash 中的值、集合的交集運(yùn)算、字符串拼接、差集與并集等。Redis 通過(guò)內(nèi)存中的數(shù)據(jù)集實(shí)現(xiàn)了高性能。此外,該數(shù)據(jù)庫(kù)還兼容于大多數(shù)編程語(yǔ)言。
6. Riak
Riak 是最為強(qiáng)大的分布式數(shù)據(jù)庫(kù)之一,它提供了輕松且可預(yù)測(cè)的伸縮能力,向用戶提供了快速測(cè)試、原型與應(yīng)用部署能力,從而簡(jiǎn)化應(yīng)用的開發(fā)過(guò)程。
7. Neo4j
Neo4j 是一款 NoSQL 圖型數(shù)據(jù)庫(kù),具有非常高的性能。它擁有一個(gè)健壯且成熟的系統(tǒng)的所有特性,向程序員提供了靈活且面向?qū)ο蟮木W(wǎng)絡(luò)結(jié)構(gòu),可以讓開發(fā)者充分享受到擁有完整事務(wù)特性的數(shù)據(jù)庫(kù)的所有好處。相較于 RDBMS,Neo4j 還對(duì)某些應(yīng)用提供了不少性能改進(jìn)。
8. Hadoop HBase
HBase 是一款可伸縮、分布式的大數(shù)據(jù)存儲(chǔ)。它可以用在數(shù)據(jù)的實(shí)時(shí)與隨機(jī)訪問(wèn)的場(chǎng)景下。HBase 擁有模塊化與線性的可伸縮性,并且能夠保證讀寫的嚴(yán)格一致性。HBase 提供了一個(gè) Java API,可以實(shí)現(xiàn)輕松的客戶端訪問(wèn);提供了可配置且自動(dòng)化的表分區(qū)功能;還有 Bloom 過(guò)濾器以及 block 緩存等特性。
9. Couchbase
雖然 Couchbase 是 CouchDB 的派生,不過(guò)它已經(jīng)成為了一款功能完善的數(shù)據(jù)庫(kù)產(chǎn)品。它向文檔數(shù)據(jù)庫(kù)轉(zhuǎn)移的趨勢(shì)會(huì)讓 MongoDB 感到壓力。每個(gè)節(jié)點(diǎn)上它都是多線程的,這是個(gè)非常主要的可伸縮性優(yōu)勢(shì),特別是當(dāng)托管在自定義或是 Bare-Metal 硬件上時(shí)更是如此。借助于一些非常棒的集成特性,諸如與 Hadoop 的集成,Couchbase 對(duì)于數(shù)據(jù)存儲(chǔ)來(lái)說(shuō)是個(gè)非常不錯(cuò)的選擇。
10. MemcacheDB
這是個(gè)分布式的鍵值存儲(chǔ)系統(tǒng),我們不應(yīng)該將其與緩存解決方案搞混;相反,它是個(gè)持久化存儲(chǔ)引擎,用于數(shù)據(jù)存儲(chǔ)并以非常快速且可靠的方式檢索數(shù)據(jù)。它遵循 memcache 協(xié)議。其存儲(chǔ)后端用于 Berkeley DB 中,支持諸如復(fù)制與事務(wù)等特性。
11. REVENDB
RAVENDB 是第二代開源數(shù)據(jù)庫(kù),它面向文檔存儲(chǔ)并且無(wú)模式,這樣就可以輕松將對(duì)象存儲(chǔ)到其中了。它提供了非常靈活且快速的查詢,通過(guò)對(duì)復(fù)制、多租與分片提供開箱即用的支持使得我們可以非常輕松地實(shí)現(xiàn)伸縮功能。它對(duì) ACID 事務(wù)提供了完整的支持,同時(shí)又能保證數(shù)據(jù)的安全性。除了高性能之外,它還通過(guò) bundle 提供了輕松的可擴(kuò)展性。
12. Voldemort
這是個(gè)自動(dòng)復(fù)制的分布式存儲(chǔ)系統(tǒng)。它提供了自動(dòng)化的數(shù)據(jù)分區(qū)功能,透明的服務(wù)器失敗處理、可插拔的序列化功能、獨(dú)立的節(jié)點(diǎn)、數(shù)據(jù)版本化以及跨越各種數(shù)據(jù)中心的數(shù)據(jù)分發(fā)功能。