nosql數據庫

1、MongoDB
介紹

MongoDB是一個基於分佈式文件存儲的數據庫。由C++語言編寫。主要解決的是海量數據的訪問效率問題,爲WEB應用提供可擴展的高性能數據存儲解決方案。當數據量達到50GB以上的時候,MongoDB的數據庫訪問速度是MySQL的10倍以上。MongoDB的併發讀寫效率不是特別出色,根據官方提供的性能測試表明,大約每秒可以處理0.5萬~1.5萬次讀寫請求。MongoDB還自帶了一個出色的分佈式文件系統GridFS,可以支持海量的數據存儲。

MongoDB也有一個Ruby的項目MongoMapper,是模仿Merb的DataMapper編寫的MongoDB接口,使用起來非常簡單,幾乎和DataMapper一模一樣,功能非常強大。

MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。他支持的數據結構非常鬆散,是類似json的bjson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

所謂“面向集合”(Collenction-Orented),意思是數據被分組存儲在數據集中,被稱爲一個集合(Collenction)。每個 集合在數據庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關係型數據庫(RDBMS)裏的表(table),不同的是它不需要定 義任何模式(schema)。
模式自由(schema-free),意味着對於存儲在mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫裏。
存儲在集合中的文檔,被存儲爲鍵-值對的形式。鍵用於唯一標識一個文檔,爲字符串類型,而值則可以是各中複雜的文件類型。我們稱這種存儲形式爲BSON(Binary Serialized dOcument Format)。

MongoDB服務端可運行在Linux、Windows或OS X平臺,支持32位和64位應用,默認端口爲27017。推薦運行在64位平臺,因爲MongoDB在32位模式運行時支持的最大文件尺寸爲2GB。

MongoDB把數據存儲在文件中(默認路徑爲:/data/db),爲提高效率使用內存映射文件進行管理。

特性

它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:

面向集合存儲,易存儲對象類型的數據。
模式自由。
支持動態查詢。   
支持完全索引,包含內部對象。   
支持查詢。   
支持複製和故障恢復。   
使用高效的二進制數據存儲,包括大型對象(如視頻等)。   
自動處理碎片,以支持雲計算層次的擴展性。   
支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。   
文件存儲格式爲BSON(一種JSON的擴展)。   
可通過網絡訪問。
官方網站

http://www.mongodb.org/

2、CouchDB
介紹

Apache CouchDB 是一個面向文檔的數據庫管理系統。它提供以 JSON 作爲數據格式的 REST 接口來對其進行操作,並可以通過視圖來操縱文檔的組織和呈現。 CouchDB 是 Apache 基金會的頂級開源項目。

CouchDB是用Erlang開發的面向文檔的數據庫系統,其數據存儲方式類似Lucene的Index文件格式。CouchDB最大的意義在於它是一個面向Web應用的新一代存儲系統,事實上,CouchDB的口號就是:下一代的Web應用存儲系統。

特性

主要功能特性有:

CouchDB是分佈式的數據庫,他可以把存儲系統分佈到n臺物理的節點上面,並且很好的協調和同步節點之間的數據讀寫一致性。這當然也得以於Erlang無與倫比的併發特性才能做到。對於基於web的大規模應用文檔應用,然的分佈式可以讓它不必像傳統的關係數據庫那樣分庫拆表,在應用代碼層進行大量的改動。
CouchDB是面向文檔的數據庫,存儲半結構化的數據,比較類似lucene的index結構,特別適合存儲文檔,因此很適合CMS,電話本,地址本等應用,在這些應用場合,文檔數據庫要比關係數據庫更加方便,性能更好。  
CouchDB支持REST API,可以讓用戶使用JavaScript來操作CouchDB數據庫,也可以用JavaScript編寫查詢語句,我們可以想像一下,用AJAX技術結合CouchDB開發出來的CMS系統會是多麼的簡單和方便。其實CouchDB只是Erlang應用的冰山一角,在最近幾年,基於Erlang的應用也得到的蓬勃的發展,特別是在基於web的大規模,分佈式應用領域,幾乎都是Erlang的優勢項目。
官方網站

http://couchdb.apache.org/

3、Hbase
介紹

HBase是一個分佈式的、面向列的開源數據庫,該技術來源於Chang et al所撰寫的Google論文“Bigtable:一個結構化數據的分佈式存儲系統”。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫.另一個不同的是HBase基於列的而不是基於行的模式。

HBase – Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集羣。   HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作爲其文件存儲系統,HBase利用Hadoop HDFS作爲其文件存儲系統;Google運行MapReduce來處理Bigtable中的海量數據,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable利用 Chubby作爲協同服務,HBase利用Zookeeper作爲對應。


HBase訪問接口
Native Java API,最常規和高效的訪問方式,適合Hadoop MapReduce Job並行批處理HBase表數據
HBase Shell,HBase的命令行工具,最簡單的接口,適合HBase管理使用
Thrift Gateway,利用Thrift序列化技術,支持C++,PHP,Python等多種語言,適合其他異構系統在線訪問HBase表數據
REST Gateway,支持REST 風格的Http API訪問HBase, 解除了語言限制
Pig,可以使用Pig Latin流式編程語言來操作HBase中的數據,和Hive類似,本質最終也是編譯成MapReduce Job來處理HBase表數據,適合做數據統計
Hive,當前Hive的Release版本尚沒有加入對HBase的支持,但在下一個版本Hive 0.7.0中將會支持HBase,可以使用類似SQL語言來訪問HBase
特性

主要功能特性有:

支持數十億行X上百萬列

採用分佈式架構 Map/reduce

對實時查詢進行優化

高性能 Thrift網關

通過在server端掃描及過濾實現對查詢操作預判

支持 XML, Protobuf, 和binary的HTTP

基於 Jruby( JIRB)的shell

對配置改變和較小的升級都會重新回滾

不會出現單點故障

堪比MySQL的隨機訪問性能

官方網站

http://hbase.apache.org/

4、cassandra
介紹

Cassandra是一個混合型的非關係的數據庫,類似於Google的BigTable。其主要功能比Dynomite(分佈式的Key-Value存儲系統)更豐富,但支持度卻不如文檔存儲MongoDB(介於關係數據庫和非關係數據庫之間的開源產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。支持的數據結構非常鬆散,是類似json的bjson格式,因此可以存儲比較複雜的數據類型。)Cassandra最初由Facebook開發,後轉變成了開源項目。它是一個網絡社交雲計算方面理想的數據庫。以Amazon專有的完全分佈式的Dynamo爲基礎,結合了Google BigTable基於列族(Column Family)的數據模型。P2P去中心化的存儲。很多方面都可以稱之爲Dynamo 2.0。

特性

和其他數據庫比較,有幾個突出特點:

模式靈活 :使用Cassandra,像文檔存儲,你不必提前解決記錄中的字段。你可以在系統運行時隨意的添加或移除字段。這是一個驚人的效率提升,特別是在大型部 署上。
真正的可擴展性 :Cassandra是純粹意義上的水平擴展。爲給集羣添加更多容量,可以指向另一臺電腦。你不必重啓任何進程,改變應用查詢,或手動遷移任何數據。
多數據中心識別 :你可以調整你的節點佈局來避免某一個數據中心起火,一個備用的數據中心將至少有每條記錄的完全複製。

一些使Cassandra提高競爭力的其他功能:

範圍查詢 :如果你不喜歡全部的鍵值查詢,則可以設置鍵的範圍來查詢。
列表數據結構 :在混合模式可以將超級列添加到5維。對於每個用戶的索引,這是非常方便的。
分佈式寫操作 :有可以在任何地方任何時間集中讀或寫任何數據。並且不會有任何單點失敗。

官方網站

http://cassandra.apache.org/

5、Hypertable
介紹

Hypertable是一個開源、高性能、可伸縮的數據庫,它採用與Google的Bigtable相似的模型。在過去數年中,Google爲在 PC集羣 上運行的可伸縮計算基礎設施設計建造了三個關鍵部分。第一個關鍵的基礎設施是Google File System(GFS),這是一個高可用的文件系統,提供了一個全局的命名空間。它通過跨機器(和跨機架)的文件數據複製來達到高可用性,並因此免受傳統 文件存儲系統無法避免的許多失敗的影響,比如電源、內存和網絡端口等失敗。第二個基礎設施是名爲Map-Reduce的計算框架,它與GFS緊密協作,幫 助處理收集到的海量數據。第三個基礎設施是Bigtable,它是傳統數據庫的替代。Bigtable讓你可以通過一些主鍵來組織海量數據,並實現高效的 查詢。Hypertable是Bigtable的一個開源實現,並且根據我們的想法進行了一些改進。

特性

主要功能特點:

負載均衡的處理

版本控制和一致性

可靠性

分佈爲多個節點

官方網站

http://hypertable.org/

6、Redis
介紹

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

性能測試結果:

SET操作每秒鐘 110000 次,GET操作每秒鐘 81000 次,服務器配置如下:

Linux 2.6, Xeon X3320 2.5Ghz.

stackoverflow 網站使用 Redis 做爲緩存服務器。

特點

主要功能特點:

安全性

主從複製

運行異常快

支持 sets(同時也支持 union/diff/inter)

支持列表(同時也支持隊列;阻塞式 pop操作)

支持哈希表(帶有多個域的對象)

支持排序 sets(高得分表,適用於範圍查詢)

Redis支持事務

支持將數據設置成過期數據(類似快速緩衝區設計)

Pub/Sub允許用戶實現消息機制

官方網站

http://redis.io/

7、Tokyo Cabinet/Tokyo Tyant
介紹

Tokyo Cabinet(TC)和Tokyo Tyrant(TT)的開發者是日本人Mikio Hirabayashi,主要用於日本最大的SNS網站mixi.jp。TC出現的時間最早,現在已經是一個非常成熟的項目,也是Key-Value數據庫領域最大的熱點,現在廣泛應用於網站。TC是一個高性能的存儲引擎,而TT提供了多線程高併發服務器,性能也非常出色,每秒可以處理4萬~5萬次讀寫操作。

TC除了支持Key-Value存儲之外,還支持Hashtable數據類型,因此很像一個簡單的數據庫表,並且還支持基於Column的條件查詢、分頁查詢和排序功能,基本上相當於支持單表的基礎查詢功能,所以可以簡單地替代關係數據庫的很多操作,這也是TC受到大家歡迎的主要原因之一。有一個Ruby項目miyazakiresistance將TT的Hashtable的操作封裝成和ActiveRecord一樣的操作,用起來非常高效。

特性

TC/TT在Mixi的實際應用當中,存儲了2000萬條以上的數據,同時支撐了上萬個併發連接,是一個久經考驗的項目。TC在保證了極高的併發讀寫性能的同時,還具有可靠的數據持久化機制,同時還支持類似關係數據庫表結構的Hashtable以及簡單的條件、分頁和排序操作,是一個很優越的NoSQL數據庫。

TC的主要缺點是,在數據量達到上億級別以後,併發寫數據性能會大幅度下降,開發人員發現在TC裏面插入1.6億條2KB~20KB數據的時候,寫入性能開始急劇下降。即當數據量達到上億條的時候,TC性能便開始大幅度下降,從TC作者自己提供的Mixi數據來看,至少上千萬條數據量的時候還沒有遇到這麼明顯的寫入性能瓶頸。

官方網站

http://fallabs.com/tokyocabinet/

8、Flare
介紹

TC是日本第一大SNS網站mixi.jp開發的,而Flare是日本第二大SNS網站green.jp開發的。簡單地說,Flare就是給TC添加了scale(可擴展)功能。它替換了TT部分,自己另外給TC寫了網絡服務器。Flare的主要特點就是支持scale能力,它在網絡服務端之前添加了一個Node Server,用來管理後端的多個服務器節點,因此可以動態添加數據庫服務節點、刪除服務器節點,也支持Failover。如果你的使用場景必須讓TC可以scale,那麼可以考慮Flare。

flare唯一的缺點就是他只支持memcached協議,因此當你使用flare的時候,就不能使用TC的table數據結構了,只能使用TC的key-value數據結構存儲。

特性

沒找到相關的介紹。

官方網站

http://flare.prefuse.org/

9、Berkeley DB
介紹

Berkeley DB (DB)是一個高性能的,嵌入數據庫編程庫,和C語言,C++,Java,Perl,Python,PHP,Tcl以及其他很多語言都有綁定。Berkeley DB可以保存任意類型的鍵/值對,而且可以爲一個鍵保存多個數據。Berkeley DB可以支持數千的併發線程同時操作數據庫,支持最大256TB的數據,廣泛 用於各種操作系統包括大多數Unix類操作系統和Windows操作系統以及實時操作系統。

Berkeley DB最初開發的目的是以新的HASH訪問算法來代替舊的hsearch函數和大量的dbm實現(如AT&T的dbm,Berkeley的 ndbm,GNU項目的gdbm),Berkeley DB的第一個發行版在1991年出現,當時還包含了B+樹數據訪問算法。在1992年,BSD UNIX第4.4發行版中包含了Berkeley DB1.85版。基本上認爲這是Berkeley DB的第一個正式版。在1996年中期,Sleepycat軟件公司成立,提供對Berkeley DB的商業支持。在這以後,Berkeley DB得到了廣泛的應用,成爲一款獨樹一幟的嵌入式數據庫系統。2006年Sleepycat公司被Oracle 公司收購,Berkeley DB成爲Oracle數據庫家族的一員,Sleepycat原有開發者繼續在Oracle開發Berkeley DB,Oracle繼續原來的授權方式並且加大了對Berkeley DB的開發力度,繼續提升了Berkeley DB在軟件行業的聲譽。Berkeley DB的當前最新發行版本是4.7.25。

特性

主要特點:

訪問速度快

省硬盤空間

官方網站

http://www.oracle.com/us/products/database/overview/index.html?origref=http://www.oschina.net/p/berkeley+db

10、memcachedb
介紹

MemcacheDB是一個分佈式、key-value形式的持久存儲系統。它不是一個緩存組件,而是一個基於對象存取的、可靠的、快速的持久存儲引擎。協議跟memcache一致(不完整),所以很多memcached客戶端都可以跟它連接。MemcacheDB採用Berkeley DB作爲持久存儲組件,故很多Berkeley DB的特性的他都支持。

特性

MemcacheDB是一個分佈式、key-value形式的持久存儲系統。它不是一個緩存組件,而是一個基於對象存取的、可靠的、快速的持久存儲引擎。 協議跟memcache一致(不完整),所以很多memcached客戶端都可以跟它連接。MemcacheDB採用Berkeley DB作爲持久存儲組件,故很多Berkeley DB的特性的他都支持。   我們是站在巨人的肩膀上的。MemcacheDB的前端緩存是Memcached   前端:memcached的網絡層   後端:BerkeleyDB存儲   

寫速度:從本地服務器通過memcache客戶端(libmemcache)set2億條16字節長的key,10字節長的Value的記錄,耗時 16572秒,平均速度12000條記錄/秒。   

讀速度:從本地服務器通過memcache客戶端(libmemcache)get100萬條16字節長的key,10字節長的Value的記錄,耗 時103秒,平均速度10000條記錄/秒。   ·支持的memcache命令

官方網站

http://memcachedb.org/
11、Memlink
介紹

Memlink 是天涯社區開發的一個高性能、持久化、分佈式的Key-list/queue數據引擎。正如名稱中的memlink所示,所有數據都建構在內存中,保證了 系統的高性能 (大約是redis幾倍),同時使用了redo-log技術保證數據的持久化。Memlink還支持主從複製、讀寫分離、List過濾操作等功能。

與Memcached不同的是,它的value是一個list/queue。並且提供了諸如持久化,分佈式的功能。聽起來有點像Redis,但它號稱比Redis更好,在很多Redis做得還不好的地方進行了改進和完善。提供的客戶端開發包包括 c,python,php,java 四種語言。

特性

特點:

內存數據引擎,性能極爲高效
List塊鏈結構,精簡內存,優化查找效率
Node數據項可定義,支持多種過濾操作
支持redo-log,數據持久化,非Cache模式
分佈式,主從同步
官方網站

http://code.google.com/p/memlink/
12、db4o
介紹

“利用表格存儲對象,就像是將汽車開回家,然後拆成零件放進車庫裏,早晨可以再把汽車裝配起來。但是人們不禁要問,這是不是泊車的最有效的方法呢。” – Esther Dyson   db4o 是一個開源的純面向對象數據庫引擎,對於 Java 與 .NET 開發者來說都是一個簡單易用的對象持久化工具,使用簡單。同時,db4o 已經被第三方驗證爲具有優秀性能的面向對象數據庫, 下面的基準測試圖對 db4o 和一些傳統的持久方案進行了比較。db4o 在這次比較中排名第二,僅僅落後於JDBC。通過圖 1 的基準測試結果,值得我們細細品味的是採用 Hibernate/HSQLDB 的方案和 JDBC/HSQLDB 的方案在性能方面有着顯著差距,這也證實了業界對 Hibernate 的擔憂。而 db4o 的優異性能,讓我們相信: 更 OO 並不一定會犧牲性能。

同時,db4o 的一個特點就是無需 DBA 的管理,佔用資源很小,這很適合嵌入式應用以及 Cache 應用, 所以自從 db4o 發佈以來,迅速吸引了大批用戶將 db4o 用於各種各樣的嵌入式系統,包括流動軟件、醫療設備和實時控制系統。   db4o 由來自加州硅谷的開源數據庫公司 db4objects 開發並負責商業運營和支持。db4o 是基於 GPL 協議。db4objects 於 2004 年在 CEO Christof Wittig 的領導下組成,資金背景包括 Mark Leslie 、 Veritas 軟件公司 CEO 、 Vinod Khosla ( Sun 公司創始人之一)、 Sun 公司 CEO 在內的硅谷高層投資人組成。毫無疑問,今天 db4objects 公司是硅谷炙手可熱的技術創新者之一。

特性

db4o 的目標是提供一個功能強大的,適合嵌入的數據庫引擎,可以工作在設備,移動產品,桌面以及服務器等各種平臺。主要特性如下:   開源模式。與其他 ODBMS 不同,db4o 爲開源軟件,通過開源社區的力量驅動開發 db4o 產品。   原生數據庫。db4o 是 100% 原生的面向對象數據庫,直接使用編程語言來操作數據庫。程序員無需進行 OR 映射來存儲對象,大大節省了程序員在存儲數據的開發時間。   高性能。 下圖爲 db4o 官方公佈的基準測試數據,db4o 比採用 Hibernate/MySQL 方案在某些測試線路上速度高出 44 倍之多!並且安裝簡單,僅僅需要 400Kb 左右的 .jar 或 .dll 庫文件。在接下來的系列文章中,我們將只關注在 Java 平臺的應用,但是實際上 db4o 毫無疑問會很好地在 .NET平臺工作。


圖:官方測試數據

易嵌入。使用 db4o 僅需引入 400 多 k 的 jar 文件或是 dll 文件,內存消耗極小。   零管理。使用 db4o 無需 DBA,實現零管理。   支持多種平臺。db4o 支持從 Java 1.1 到 Java 5.0,此外還支持 .NET 、 CompactFramework 、 Mono 等 .NET 平臺,也可以運行在 CDC 、 PersonalProfile 、 Symbian 、 Savaje 以及 Zaurus 這種支持反射的 J2ME 方言環境中,還可以運行在 CLDC 、 MIDP 、 RIM/Blackberry 、 Palm OS 這種不支持反射的 J2ME 環境中。   或許開發者會問,如果現有的應用環境已經有了關係型數據庫怎麼辦?沒關係,db4o 的 dRS(db4o Replication System)可實現 db4o 與關係型數據庫的雙向同步(複製),如圖 3 。 dRS 是基於 Hibernate 開發,目前的版本是 1.0 ,並運行在 Java 1.2 或更高版本平臺上,基於 dRS 可實現 db4o 到 Hibernate/RDBMS 、 db4o 到 db4o 以及 Hibernate/RDBMS 到 Hibernate/RDBMS 的雙向複製。dRS 模型如圖


圖:DRS模型

官方網站

http://www.db4o.com/china/
13、Versant
介紹

Versant Object Database (V/OD) 提供強大的數據管理,面向 C++, Java or .NET 的對象模型,支持大併發和大規模數據集合。

Versant對象數據庫是一個對象數據庫管理系統(ODBMS:Object Database Management System)。它主要被用在複雜的、分佈式的和異構的環境中,用來減少開發量和提高性能。尤其當程序是使用Java和(或)C++語言編寫的時候,尤其有用。

它是一個完整的,電子基礎設施軟件,簡化了事務的構建和部署的分佈式應用程序。

作爲一個卓越的數據庫產品,Versant ODBMS在設計時的目標就是爲了滿足客戶在異類處理平臺和企業級信息系統中對於高性能、可量測性、可靠性和兼容性方面的需求。

Versant對象數據庫已經在爲企業業務應用提供可靠性、完整性和高性能方面獲得了建樹,Versant ODBMS所表現出的高效的多線程架構、internal parallelism 、平穩的Client-Server結構和高效的查詢優化,都體現了其非常卓越的性能和可擴展性。

Versant對象數據庫包括Versant ODBMS,C++和Java語言接口,XML工具包和異步複製框架。

特性

一、強有力的優勢

Versant Object Database8.0,適用於應用環境中包含複雜對象模型的數據庫,其設計目標是能夠處理這些應用經常需要的導航式訪問,無縫的數據分發,和企業級的規模。

對於很多應用程序而言,最具挑戰性的方面是控制業務模型本身的內在複雜性。 電信基礎設施,交通運輸網絡,仿真,金融工具以及其它領域的複雜性必須得到支持, 而且這種支持複雜性的方式還要能夠隨着環境和需求變化而不斷地改進應用程序。 這些應用程序的重點是領域和這些領域的邏輯。 複雜的設計應當以對象模型爲基礎。將技術需求例如持久性(和SQL)與領域模型混合在一起的架構會帶來災難性的後果。

Versant對象數據庫使您可以使用那些只含有域行爲信息的對象,而不用考慮持久性。同時,Versant對象數據庫還能提供跨多個數據庫的無縫的數據分發,高併發性,細粒度鎖,頂級性能, 以及通過複製和其它技術提供的高可用性。現代Java中的對象關係映射工具已經簡化了很多映射的問題, 但是它們還不能提供Versant所能提供的無縫數據分發的功能和高性能。

二、主要特性

C++、Java及.NET 的透明對象持久

支持對象持久標準,如JDO

跨多數據庫的無縫數據分發

企業級的高可用性選項

動態模式更新

管理工作量少(或不需要)

端到端的對象支持架構

細粒度併發控制

多線程,多會話

支持國際字符集

高速數據採集

三、優勢

對象層次結構的快速存儲、檢索和瀏覽

性能高於關係型數據庫10 倍以上

減少開發時間

四、8.0的新特性

增強的多核線性擴展能力

增強的數據庫管理工具(監控、數據庫檢查、數據重組)

支持基於LINQ的.NET綁定機制

支持.NET和JDO應用的FTS基於“Black Box”工具的數據庫活動記錄與分析

五、Versant對象數據庫特性

動態模式更新

Versant支持緩慢模式更新,這意味着當被使用時,對象纔會從舊的模式轉爲新的模式,就不需要映射了。所有這些都支持數據庫模式的更新與敏捷開發。

跨多數據庫的無縫數據分發

客戶端與一個或多個數據庫進行無縫交互。單個的數據庫無縫地聯合在一起,使您能夠給數據分區,提高讀寫能力,增大總體的數據庫的大小。這些數據庫上的數據分發是透明的。它們被結合在一起形成一個

無縫的數據庫,提供巨大的可擴展性。

併發控制

對象級鎖確保只有在兩個應用程序試圖更新同一對象時纔會有衝突的發生,這與基於頁的鎖機制不同。基於頁的鎖機制可能會導致併發熱點的假象。

透明的C++對象持久性

C++對象,STL類,標準C++集合如字典,映射,映射的映射,諸如此類,以原樣保存在數據庫中。狀態變化在後臺被自動追蹤。當相關的事務提交後,所有的變化將會被自動發送到數據庫。因此就能形成一種非常自然的,低干擾的編程風格,這樣,就能實現應用程序的快速開發,同時當需求發生變化時,應用程序就能夠靈活地修改。

透明的Java對象持久性

V/OD的JVI & JDO 2.0 API 提供了透明的簡單對象(POJO)的持久性,包括 Java 2 持久類,接口,以及任何用戶定義的類。狀態變化

在後臺被自動追蹤。事務提交後,自動把所有變化寫入數據庫。因此,對於託管和非託管部署,您都能獲得輕量級的編程風格。

可完全嵌入Versant 可以被嵌入到應用程序中,數據庫規模可以達到TB 級別。

並且可以自主運行,不需要任何管理。

六、企業級的特性

對象端到端

對象端到端意味着你的應用對象存在於客戶端,網絡上,以及數據庫中。與關係型數據庫不同的是,對象在內存中和數據庫中的表示之間不需要任何映射或轉換。

應用的客戶端緩存透明地緩存對象以提高速度。數據庫支持對象,它能執行查詢,建立索引,使應用能夠平衡它和數據庫間的進程執行。XA的支持使與其它事務數據源協調成爲可能。

七、V/OD 8數據庫體系架構

高可用性

通過在線進行數據庫管理實現數據庫的高可用性。

容錯服務器

容錯服務器選項可以在Versant數據庫的硬件或是軟件出現故障的時候,自動進行失效轉移和數據恢復。容錯服務器使用的是在兩個數據庫實例之間進行同步複製,一旦出現故障,容錯服務器也會支持透明重同步。

異步數據複製

異步數據複製選項支持多個對象服務器之間的主從異步複製和點對點異步複製。可以使用異步數據複製將數據複製到一個分佈式恢復站點或者將數據在多個本地的對象數據庫之間進行復制,以提高性能和可靠性。

高可用性備份

高可用性數據備份選項使Versant可以使用EMC Symmetrix或其它企業級存儲系統的磁盤鏡像的特性,來對很大的數據捲進行在線備份,同時又不會影響到可用性。

在線再組織

Versant 數據庫再組織選項爲了會刪除大量對象的應用而設計的。它使用戶能夠收回數據庫中未使用的空間,同時使數據庫保持正常運作,增加可用空間,改善數據庫的性能。

八、爲什麼要使用Versant面向對象數據庫?

通過縮短研發時間來加速上市

對象關係映射代碼可能佔用了你的應用的40%或更多。有了Versant面向對象數據庫,映射代碼就不再需要了。

極大地提高了性能和數據吞吐能力

當應用中涉及到複雜的內存對象模式,尤其是關聯訪問時,對象數據庫要比映射到關係數據庫表現得更好。例如,當應用程序需要從對象數據庫裏檢索一個對象時,只要執行單條查詢即可找到該對象。當映射到一個關係數據庫時,如果對象包含多對多關聯,那麼就必須通過一個或多個連接才能檢索到關聯表中的數據。使用了對象數據庫,對於一般複雜性的對象的檢索,速度則提高了三倍,對於複雜性很高的對象的檢索,例如多對多關聯,搜索的速度則提高了三十倍。而對於集合的集合和遞歸聯繫,檢索的速度有可能提高五十倍。

根據需求的變化,快速改進應用

今天,商業進程、結構和應用要求的變化的速度使得適應變化的能力變得極爲重要。對象關係映射和其它適用於剛性存儲結構的方法,讓變化變得困難。而Versant對象數據庫極大的提升了你的應用滿足當前和未來的商業需求的能力。

投資回報率

當用戶遇到了複雜的對象模型和大的數據集,對象數據庫就是首選的解決方案。對象數據庫主要的優點在於,它能夠縮小代碼的規模,降低研發成本,縮短上市的時間,減少或根本沒有管理的要求以及降低購置硬件和服務器軟件許可證的成本。性能上的優勢還可以大大降低高負載動作應用所消耗的成本。大型的關係數據庫成本高非常昂貴,還需要昂貴的硬件支持

官方網站

http://www.versant.com/index.aspx

14、Neo4j
介紹

Neo4j是一個嵌入式,基於磁盤的,支持完整事務的Java持久化引擎,它在圖像中而不是表中存儲數據。Neo4j提供了大規模可擴展性,在一臺機器上可以處理數十億節點/關係/屬性的圖像,可以擴展到多臺機器並行運行。相對於關係數據庫來說,圖形數據庫善於處理大量複雜、互連接、低結構化的數據,這些數據變化迅速,需要頻繁的查詢——在關係數據庫中,這些查詢會導致大量的表連接,因此會產生性能上的問題。Neo4j重點解決了擁有大量連接的傳統RDBMS在查詢時出現的性能衰退問題。通過圍繞圖形進行數據建模,Neo4j會以相同的速度遍歷節點與邊,其遍歷速度與構成圖形的數據量沒有任何關係。此外,Neo4j還提供了非常快的圖形算法、推薦系統和OLAP風格的分析,而這一切在目前的RDBMS系統中都是無法實現的。

Neo是一個網絡——面向網絡的數據庫——也就是說,它是一個嵌入式的、基於磁盤的、具備完全的事務特性的Java持久化引擎,但是它將結構化數據存儲在網絡上而不是表中。網絡(從數學角度叫做圖)是一個靈活的數據結構,可以應用更加敏捷和快速的開發模式。

你可以把Neo看作是一個高性能的圖引擎,該引擎具有成熟和健壯的數據庫的所有特性。程序員工作在一個面向對象的、靈活的網絡結構下而不是嚴格、靜態的表中——但是他們可以享受到具備完全的事務特性、企業級的數據庫的所有好處。

由於使用了“面向網絡的數據庫”,人們對Neo充滿了好奇。在該模型中,以“節點空間”來表達領域數據——相對於傳統的模型表、行和列來說,節點空間是很多節點、關係和屬性(鍵值對)構成的網絡。關係是第一級對象,可以由屬性來註解,而屬性則表明了節點交互的上下文。網絡模型完美的匹配了本質上就是繼承關係的問題域,例如語義Web應用。Neo的創建者發現繼承和結構化數據並不適合傳統的關係數據庫模型:

  1.對象關係的不匹配使得把面向對象的“圓的對象”擠到面向關係的“方的表”中是那麼的困難和費勁,而這一切是可以避免的。

  2.關係模型靜態、剛性、不靈活的本質使得改變schemas以滿足不斷變化的業務需求是非常困難的。由於同樣的原因,當開發小組想應用敏捷軟件開發時,數據庫經常拖後腿。

  3.關係模型很不適合表達半結構化的數據——而業界的分析家和研究者都認爲半結構化數據是信息管理中的下一個重頭戲。

  4.網絡是一種非常高效的數據存儲結構。人腦是一個巨大的網絡,萬維網也同樣構造成網狀,這些都不是巧合。關係模型可以表達面向網絡的數據,但是在遍歷網絡並抽取信息的能力上關係模型是非常弱的。

雖然Neo是一個比較新的開源項目,但它已經在具有1億多個節點、關係和屬性的產品中得到了應用,並且能滿足企業的健壯性和性能的需求:

完全支持JTA和JTS、2PC分佈式ACID事務、可配置的隔離級別和大規模、可測試的事務恢復。這些不僅僅是口頭上的承諾:Neo已經應用在高請求的24/7環境下超過3年了。它是成熟、健壯的,完全達到了部署的門檻。

特性

Neo4j是一個用Java實現、完全兼容ACID的圖形數據庫。數據以一種針對圖形網絡進行過優化的格式保存在磁盤上。Neo4j的內核是一種極快的圖形引擎,具有數據庫產品期望的所有特性,如恢復、兩階段提交、符合XA等。

Neo4j既可作爲無需任何管理開銷的內嵌數據庫使用;也可以作爲單獨的服務器使用,在這種使用場景下,它提供了廣泛使用的REST接口,能夠方便地集成到基於PHP、.NET和JavaScript的環境裏。但本文的重點主要在於討論Neo4j的直接使用。

Neo4j的典型數據特徵:

•數據結構不是必須的,甚至可以完全沒有,這可以簡化模式變更和延遲數據遷移。

•可以方便建模常見的複雜領域數據集,如CMS裏的訪問控制可被建模成細粒度的訪問控制表,類對象數據庫的用例、TripleStores以及其他例子。

•典型使用的領域如語義網和RDF、LinkedData、GIS、基因分析、社交網絡數據建模、深度推薦算法以及其他領域。

圍繞內核,Neo4j提供了一組可選的組件。其中有支持通過元模型構造圖形結構、SAIL - 一種SparQL兼容的RDF TripleStore實現或一組公共圖形算法的實現。

高性能?

要給出確切的性能基準數據很難,因爲它們跟底層的硬件、使用的數據集和其他因素關聯很大。自適應規模的Neo4j無需任何額外的工作便可以處理包含數十億節點、關係和屬性的圖。它的讀性能可以很輕鬆地實現每毫秒(大約每秒1-2百萬遍歷步驟)遍歷2000關係,這完全是事務性的,每個線程都有熱緩存。使用最短路徑計算,Neo4j在處理包含數千個節點的小型圖時,甚至比MySQL快1000倍,隨着圖規模的增加,差距也越來越大。

這其中的原因在於,在Neo4j裏,圖遍歷執行的速度是常數,跟圖的規模大小無關。不象在RDBMS裏常見的聯結操作那樣,這裏不涉及降低性能的集合操作。Neo4j以一種延遲風格遍歷圖 - 節點和關係只有在結果迭代器需要訪問它們的時候纔會被遍歷並返回,對於大規模深度遍歷而言,這極大地提高了性能。

寫速度跟文件系統的查找時間和硬件有很大關係。Ext3文件系統和SSD磁盤是不錯的組合,這會導致每秒大約100,000寫事務操作。

官方網站

http://neo4j.org/

15、BaseX
介紹

BaseX 是一個XML數據庫,用來存儲緊縮的XML數據,提供了高效的 XPath 和 XQuery 的實現,還包括一個前端操作界面。

特性

BaseX一個比較顯著地優點是有了GUI,界面中有查詢窗口,可採用XQuery查詢相關數據庫中的XML文件;也有能夠動態展示xml文件層次和節點關係的圖。但我感覺也就這點好處了,編程時和GUI無關了。

和Xindice相比,BaseX更能支持大型XML文檔的存儲,而Xindice對大型xml沒有很好的支持,爲管理中小型文檔的集合而設計。

BaseX 是一個XML數據庫,用來存儲緊縮的XML數據,提供了高效的 XPath 和 XQuery 的實現,還包括一個前端操作界面。

官方網站

http://basex.org/
雖然NoSQL流行語火起來才短短一年的時間,但是不可否認,現在已經開始了第二代運動。儘管早期的堆棧代碼只能算是一種實驗,然而現在的系統已經更加的成熟、穩定。不過現在也面臨着一個嚴酷的事實:技術越來越成熟——以至於原來很好的NoSQL數據存儲不得不進行重寫,也有少數人認爲這就是所謂的2.0版本。這裏列出一些比較知名的工具,可以爲大數據建立快速、可擴展的存儲庫。

1. Casssandra


Cassandra最初由Facebook開發,後來成了Apache開源項目,它是一個網絡社交雲計算方面理想的數據庫。它集成了其他的流行工具如Solr,現在已經成爲一個完全成熟的大型數據存儲工具。Cassandra是一個混合型的非關係的數據庫,類似於Google的BigTable。其主要功能比Dynomite(分佈式的Key-Value存儲系統)更豐富,但支持度卻不如文檔存儲MongoDB。Cassandra的主要特點就是它不是一個數據庫,而是由一堆數據庫節點共同構成的一個分佈式網絡服務,對Cassandra的一個寫操作,會被複制到其他節點上去,而對Cassandra的讀操作,也會被路由到某個節點上面去讀取。在最近的一次測試中,Netflix建立了一個288個節點的集羣。

2. Lucene/Solr


Lucene是Apache軟件基金會4 jakarta項目組的一個子項目,這是一個開放源代碼的全文檢索引擎工具包,就是說它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構。不過大多數人並不認同Lucene是一個數據庫,因爲大多數人只是用它來檢索大量的文本塊,不過它的確採用了與其他NoSQL數據存儲相似的模型。如果說查詢並不是僅僅侷限於精確的匹配,而是尋找出那些出現在塊中的字或者字段的話,毫無疑問,Lucene/Solr是最好的查詢方式。

3. Riak


Riak是由技術公司basho開發的一個類似Dynamo的分佈式Key-Value系統。其以分佈式,水平擴展性,高容錯性等特點著稱。從事Riak工作最有趣的部分是可以使用JavaScript或者Erlang來做Map/Reduce查詢,它們會查詢每個節點,收集結果,而且可以重複,如果需要使用的結果進行重新進行搜尋的話。該系統還爲類似於Solr的搜索提供全文索引,同時還提供一個控制面板,可以查看集羣的信息。

4. CouchDB


CouchDB是用Erlang開發的面向文檔的數據庫系統,不過它不是一個傳統的關係數據庫,而是面向文檔的數據庫,其數據存儲方式有點類似lucene的index文件格式,CouchDB最大的意義在於它是一個面向web應用的新一代存儲系統。作爲一個分佈式的數據庫,CouchDB可以把存儲系統分佈到n臺物理的節點上面,並且很好的協調和同步節點之間的數據讀寫一致性。CouchDB支持REST API,可以讓用戶使用JavaScript來操作CouchDB數據庫,也可以用JavaScript編寫查詢語句,可以想像一下,用AJAX技術結合CouchDB開發出來的CMS系統會是多麼的簡單和方便。

CouchDB還有一個更加商業化的“表親”——Couchbase,不過它提供緩存功能,更好的分片,增量查詢,更好的索引和一些其他的功能。其實Couchbase與CouchDB也是緊密相關的,Couchbase產品包含了CouchDB的一個副本。

5. Neo4J


大多數的NoSQL數據庫只是存儲鍵和值的一個靈活的捆綁。不過Neo4J的存儲的是對象之間的關係,或者說這種結構就是數學中的“圖”。Neo4J是一個面向網絡(“圖”)的數據庫,也就是說,它是一個嵌入式的、基於磁盤的、具備完全的事務特性的Java持久化引擎,但是它將結構化數據存儲在網絡上而不是表中,當然也可以把Neo4J看作是一個高性能的圖引擎,該引擎具有成熟和健壯的數據庫的所有特性。該工具包括很多有關搜索和分析的關係的算法,它能夠幫助尋找誰是我的朋友,或者尋找朋友的朋友。這些“圖的遍歷”算法,可以節省很多指針查詢的麻煩。

6. Oracle的NoSQL


也許是NoSQL運動太紅火的原因,Oracle決定開發一款產品,將鍵/值對拆分在整個節點集上,這樣的優勢在於提供了一個靈活的事務保護措施,進而可以確保從數據在節點上等待存儲開始到通過網絡被成功備份結束,都盡在掌握之中。

Oracle的NoSQL Database,是在10月4號的甲骨文全球大全上發佈的Big Data Appliance的其中一個組件,Big Data Appliance是一個集成了Hadoop、NoSQL Database、Oracle數據庫Hadoop適配器、Oracle數據庫Hadoop裝載器及R語言的系統。

7. MongoDB


MongoDB是一個基於分佈式文件存儲的數據庫,介於關係數據庫和非關係數據庫之間,是非關係數據庫當中功能最豐富,最像關係數據庫的。MongoDB最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。MongoDB支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。

MongoDB是高性能開源文檔數據庫,也是目前最受關注的NoSQL技術之一,以敏捷、可擴展和對企業應用友好(支持事務,一致性和數據完整性保證,有大企業應用案例)而著稱。有人甚至認爲LAMP中的M應該用MongoDB取代MySQL,其火熱程度可見一斑。使用MongoDB的公司包括Foursquare, Craiglist, 迪士尼,SAP,Intuit,EA等,國內淘寶、大衆點評、視覺中國等公司有應用。(最新版MongoDB 2.2下載)

8. Hadoop的HBase


HBase(Hadoop Database),是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集羣。HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作爲其文件存儲系統,HBase利用Hadoop HDFS作爲其文件存儲系統;Google運行MapReduce來處理Bigtable中的海量數據,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據。

雖然大多數人都認爲Hadoop及其所有的工具都是作爲管理大規模集羣的一種機制,其實不然,Hadoop也包括數據庫,在HBase中也是通過節點來傳播數據。Hadoop的Map /Reduce的架構是非常適合於複雜的計算任務或查詢工作。領土在不斷的擴張,新的數據庫像Accumulo就是Hadoop平臺的一個延伸。(Apache Accumulo是一個可靠的、可伸縮的、高性能的排序分佈式的Key-Value存儲解決方案,基於單元訪問控制以及可定製的服務器端處理。使用Google BigTable設計思路,基於Apache Hadoop、Zookeeper和Thrift構建)

9. BigTable/ Accumulo/ Hypertable


BigTable是非關係的數據庫,是一個稀疏的、分佈式的、持久化存儲的多維度排序Map。Bigtable的設計目的是可靠的處理PB級別的數據,並且能夠部署到上千臺機器上。Bigtable已經實現了下面的幾個目標:適用性廣泛、可擴展、高性能和高可用性。Bigtable已經在超過60個Google的產品和項目上得到了應用,包括Google Analytics、GoogleFinance、Orkut、Personalized Search、Writely和GoogleEarth。

谷歌的BigTable開啓了NoSQL的熱潮,現在很多公司都模仿谷歌的架構搭建了自己的平臺。谷歌的AppEngine用戶可以把鍵/值對存儲在數據庫中,而Hadoop的用戶可以把它們放在Accumulo上,其他的可以使用Hypertable。所有的這些基本上都屬於鍵/值存儲,只不過添加了一些額外的功能,增加了搜索的速度而已。

10. DynamoDB


DynamoDB是亞馬遜的key-value模式的存儲平臺,可用性和擴展性都很好,性能也不錯:讀寫訪問中99.9%的響應時間都在300ms內。DynamoDB的NoSQL解決方案,也是使用鍵/值對存儲的模式,平且通過服務器把所有的數據存儲在SSD上的三個不同的區域。如果有更高的傳輸需求,DynamoDB也可以在後臺添加更多的服務器。(編譯/@CSDN王鵬,審校/包研)
發佈了104 篇原創文章 · 獲贊 1 · 訪問量 5775
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章