常見的文檔型NoSQL包括MongoDB、CouchDB等,其中MongoDB是一個高性能、開源、無模式的文檔型數據庫,它在許多場景下 可用於替代傳統的關係型數據庫或鍵/值存儲方式,MongoDB使用C++開發,提供了不少功能,如面向集合的存儲、動態查詢、完整的索引支持、查詢監 視、複製及自動故障轉移、高效的傳統存儲方式、自動分片以支持雲級別的伸縮性。 html
SequoiaDB(巨杉數據庫)做爲文檔型NoSQL家族中的新成員,其企業級的新特性頗受關注。根據SequoiaDB官網的描述,該數據 庫在提供文檔類JSON接口的同時,可以替代HBase做爲Hadoop的存儲引擎。與MongoDB相比,其Hadoop接口較爲完善。所以,本文將 MongoDB與SequoiaDB兩款文檔型NoSQL同時進行測試,對比二者的功能和性能。 數據庫
1、測試環境 服務器
本次測試基於的環境是6臺刀片機,每臺的配置爲4核AMD Opteron 2378 2.4GHz,內存4GB的服務器,2x150GB Raid 0本地磁盤。操做系統使用SLES 11SP2(Kernel:3.0.13-0.27-default x86_64)。 多線程
MongoDB部署在6臺刀片機上,每臺物理機做爲一個單節點Shard。其中兩臺物理機還部署了Config Server,另一臺物理機部署了mongos進程。 併發
SequoiaDB部署在6臺刀片機上,每臺物理機做爲一個單節點複製組,其中兩臺物理機還部署了編目節點,另一臺物理機部署了協調節點。 異步
MongoDB與SequoiaDB均使用「id」做爲分區鍵字段,每條記錄平均550字節,均採用手工指定分區方式分區。 分佈式
2、主要功能對比 oop
功能 性能 |
MongoDB 測試 |
SequoiaDB |
開發語言 |
C++ |
C++ |
類型 |
文檔類 |
文檔類 |
分佈式機制 |
Sharding |
Sharding |
數據格式 |
JSON/BSON |
JSON/BSON |
操做界面 |
Javascript |
Javascript |
支持多索引 |
支持 |
支持 |
Hadoop支持 |
支持內置MapReduce |
支持Hadoop MapReduce查詢,可以鏈接Pig/Hive接口 |
支持範圍切分與散列切分 |
支持 |
支持 |
支持彙集操做 |
支持 |
支持 |
其餘功能 |
支持地理索引 |
支持跨集合跨節點事務、內置支持類SQL查詢、支持數據壓縮 |
主要應用場景 |
數據類型多變,須要動態查詢,須要多字段索引 |
數據類型多變,須要動態查詢,須要多字段索引,須要事務功能(提交回滾),Hadoop環境中的數據存儲 |
3、命令行操做對比
如下命令行完成建立表(集合)、插入數據、查詢數據、刪除表(集合)四種操做。
一、MongoDB
二、SequoiaDB
4、主要性能對比
一、單節點單線程場景
測試環境:1臺刀片機,SequoiaDB/MongoDB爲獨立模式。
錄入場景:使用單線程本地TCPIP鏈接,插入1億條記錄。
查詢場景:使用單線程本地TCPIP鏈接,使用集合掃描1億條記錄,返回最後一條。
(1)數據錄入
X軸表明數據庫內包含的記錄總數,Y軸表明數據庫每秒插入記錄數量。
(2)數據錄入(平均)
Y軸表明數據庫平均每秒插入記錄數量。
(3)數據查詢
Y軸表明數據庫平均每秒掃描記錄數量。
(4)佔用空間
Y軸表明插入1億條記錄後所佔用的存儲空間(單位MB)。
從以上測試結果能夠看出,SequoiaDB在單節點、單線程的使用場景下,插入性能優於MongoDB,在查找某一特定記錄方面 MongoDB略快於SequoiaDB,在特性方面,MongoDB的異步插入至關於批量插入,而SequoiaDB的壓縮插入在比較佔優點,性能相對 自身的批量插入提升了將近一倍,而空間節約就更加可觀了。
二、多節點多線程環境
測試環境:6臺HP刀片機,SequoiaDB/MongoDB爲集羣模式。
錄入場景:每臺機器使用5線程本地TCPIP鏈接(總共30線程),總共插入1億2千萬條記錄。
查詢場景:每臺機器使用5線程本地TCPIP鏈接(總共30線程),每線程使用集合掃描1億2千萬條記錄,返回最後一條。
(1)數據錄入
X軸表明每條線程插入的記錄總數,Y軸表明數據庫單條線程每秒插入記錄數量。
(2)數據錄入(平均)
Y軸表明數據庫單條線程平均每秒插入記錄數量。
(3)數據查詢
Y軸表明數據庫單條線程平均每秒掃描記錄數量。
(4)表掃描
X軸表明每條數據庫中存在的記錄總數,Y軸表明數據庫單條線程每秒掃描記錄數量。
(5)佔用空間
Y軸表明插入1億2千萬條記錄後所佔用的總的存儲空間(單位MB)。
在同等狀況下,都採用6個分區和手動分區,MongoDB也禁用了balancer,對MongoDB和SequoiaDB共有特性進行對比測 試。從以上測試結果能夠看出,SequoiaDB的插入性能在併發狀況下也遠遠優於MongoDB,雖然MongoDB在查詢特定記錄方面仍是略勝一籌, 可是從引入全表掃描的結果來看,一旦客戶端查詢而且取回記錄集時,SequoiaDB優點突顯。
5、總結
MongoDB和SequoiaDB做爲文檔型NoSQL的表明,在功能和性能表現上各有千秋。經過本次測試可以看出,MongoDB和 SequoiaDB的性能都很強勁,其中SequoiaDB更是表現不俗,相信在不久的未來SequoiaDB可以獨當一面,打開企業級NoSQL市場的 局面。