MongoDB3.0.6版本wiredtiger與MMAPv1引擎的寫入耗時對比

來源:互聯網
上載者:User

MongoDB3.0.6版本wiredtiger與MMAPv1引擎的寫入耗時對比
一、業務需求:    公司某個APP應用的資料庫已經實現了日誌與業務的垂直分割,將原有的一套RAC,拆分成兩套,目前資料庫暫時還比較穩定,伺服器負載也在正常範圍內,但是現有使用者數450萬,日活躍使用者達到100萬,每日日誌產生1000萬條記錄,100G的資料量,而目標使用者數接近1800萬,預估屆時的每日資料庫將達到6000萬/條,且需要滿足單條記錄查詢的需求,計劃採用MongoDB來替代Oracle RAC,現測試MongoDB WiredTiger引擎與MMAPv1引擎的寫入對比。 二、MongoDB3.0.x的版本特性(相對於MongoDB2.6及以下):

  • 增加了wiredtiger引擎:
  • 開源的儲存引擎;
  • 支援多核CPU、充分利用記憶體/晶片層級緩衝(註:10月14日剛剛發布的3.0.7版本中,進一步改進了記憶體操作的效能);
  • 基於B-TREE及LSM演算法;
  • 提供文檔級鎖(document-level concurrency control),類似於關係型資料庫的的行級鎖;
  • 支援檔案壓縮(其中snappy壓縮機制可以在5%的額外CPU消耗,減少70%的空間使用,也可以根據需要調節壓縮比例),三種壓縮類型:
  • 不壓縮;
  • Snappy壓縮:預設的壓縮方式, Snappy是在Google內部生產環境中被許多項目使用的壓縮庫,包括BigTable,MapReduce和RPC等,壓縮速度比Zlib快,但是壓縮處理檔案的大小會比Zlib大20%-100%, Snappy對於純文字的壓縮率為1.5-1.7,對於HTML是2-4,對於JPEG、PNG和其他已經壓縮過的資料壓縮率為1.0。在I7 i7 5500u 單核CPU測試中,壓縮效能可在200M/s-500M/s;
  • Zlib壓縮: Z1ib是一個免費、通用、跨平台、不受任何法律阻礙的、無損的資料壓縮開發庫,相對於Snappy壓縮,消耗CPU效能高、壓縮速度慢,但是壓縮效果好。
  • MMAPv1引擎(MongoDB2.6及以下版本用的是MMAP引擎):
  • collection鎖(collection-level concurrency control),在MMAP版本中,只提供了database的鎖(既當一個使用者對一個collection進行操作時,其他的collection也被掛起);
  • 無縫遷移(MMAP版本的資料可以線上遷移至MMAPV1版本,也可以遷移至wiredtiger引擎中)。  
  • 可插拔的儲存引擎API(類似於mysql的多引擎驅動)
  • 通過不同的資料引擎來滿足不同的資料需求;
  • 未來更多的情境擴充。
  • Ops manager(MongoDB企業版提供的功能)
  • 居於web的圖形管理介面
  • 減少日常日常和配置的工作
 四、測試環境:

伺服器硬體設定:172.16.16.169 CPU:2*E5620  @ 2.40GHz、記憶體:8G

用戶端硬體設定:172.16.40.92 CPU: 4*I5-4300U@ 1.90GHz、記憶體:4G

資料庫:mongodb V3.0.6

開發環境:python3.4.3、pycharm4.5.4

測試前提:已安裝完成了mongodb、python、pycharm  五、測試情境:插入100萬條資料的時間消耗對比;      1. 在伺服器端啟動MongoDB(預設為MMAPv1引擎,預設連接埠為27017,在MongoDB的安裝目錄中啟動MongoDB,定義資料和日誌路徑):
#./mongod --dbpath=/data/db --logpath=/data/log 
      2. 登入MongoDB:
#./mongo      
      3. 查看當前的引擎狀態:
> db.serverStatus()  "storageEngine" : {                "name" : "mmapv1"
      4. 在伺服器端啟動MongoDB(WiredTiger引擎,連接埠:11111,在MongoDB的安裝目錄中啟動MongoDB,定義資料和日誌路徑,定義WiredTiger引擎):
#./mongod --dbpath=/data/wiredtiger --logpath=/data/wiredtiger/log  
      5. 登入至啟動了WiredTiger引擎的Mongodb:
#./mongo  127.0.0.1:11111 
      6. 查看當前的引擎狀態:
> db.serverStatus()  "storageEngine" : {                "name" : "wiredTiger"
       7. python串連MongoDB MMAPv1寫入配置:
import  timeimport datetimeimport  timeitimport  mathISOTIMEFORMAT = '%Y-%m-%d %X'from pymongo import MongoClientmc = MongoClient("172.16.16.169",27017)db = mc.usersdef dateDiffInSeconds(date1,date2):    timedelta = date2 - date1    return timedelta.days*24*3600 +timedelta.secondsdate1 = datetime.datetime.now()db.users.drop()for i  in range(0,1000000) :db.users.insert({"name":"ljai","age":i,"addr":"fuzhou"})c = db.users.find().count()print("count is ",c)date2 = datetime.datetime.now()print(date1)print(date2)print(dateDiffInSeconds(date1,date2),"seconds")mc.close()

  8. 測試結果:100萬條資料寫入花費了12分鐘28秒:

 2、 python串連MongoDB WiredTiger寫入配置:

import  timeimport datetimeimport  timeitimport  mathISOTIMEFORMAT = '%Y-%m-%d %X'from pymongo import MongoClientmc = MongoClient("172.16.16.169",27017)db = mc.usersdef dateDiffInSeconds(date1,date2):    timedelta = date2 - date1    return timedelta.days*24*3600 +timedelta.secondsdate1 = datetime.datetime.now()db.users.drop()for i  in range(0,1000000) :db.users.insert({"name":"ljai","age":i,"addr":"fuzhou"})c = db.users.find().count()print("count is ",c)date2 = datetime.datetime.now()print(date1)print(date2)print(dateDiffInSeconds(date1,date2),"seconds")mc.close()

 9. 測試結果:100萬條資料寫入花費了10分3秒:

  100萬條的資料寫入,WireTiger引擎會比MMAPv1快一些,後續再繼續其他方面的效能測試。

更多MongoDB相關內容可以看看以下的有用連結: 

MongoDB 3.0 正式版發布下載 

CentOS編譯安裝MongoDB

CentOS 編譯安裝 MongoDB與mongoDB的php擴充

CentOS 6 使用 yum 安裝MongoDB及伺服器端配置

Ubuntu 13.04下安裝MongoDB2.4.3

MongoDB入門必讀(概念與實戰並重)

Ubunu 14.04下MongoDB的安裝指南

《MongoDB 權威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

Nagios監控MongoDB分區叢集服務實戰

基於CentOS 6.5作業系統搭建MongoDB服務

MongoDB 的詳細介紹:請點這裡
MongoDB 的:請點這裡

本文永久更新連結地址: 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.