1. 程式人生 > >記錄一次MongoDB3.0.6版本wiredtiger與MMAPv1引擎的寫入耗時對比

記錄一次MongoDB3.0.6版本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是在谷歌內部生產環境中被許多專案使用的壓縮庫,包括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*[email protected] 2.40GHz、記憶體:8G

客戶端硬體配置:172.16.40.92 CPU: 4*[email protected] 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:

#./mongo127.0.0.1:11111 

6. 檢視當前的引擎狀態:

> db.serverStatus()

"storageEngine" : {

"name" : "wiredTiger"

7. python連線MongoDB MMAPv1寫入配置:

importtime
import datetime
importtimeit
importmath
ISOTIMEFORMAT = '%Y-%m-%d %X'

from pymongo import MongoClient
mc = MongoClient("172.16.16.169",27017)
db = mc.users
def dateDiffInSeconds(date1,date2):
timedelta = date2 - date1
return timedelta.days*24*3600 +timedelta.seconds
date1 = datetime.datetime.now()
db.users.drop()
for iin 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. 測試結果:1000萬條資料寫入花費了12分鐘28秒:

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

importtime
import datetime
importtimeit
importmath
ISOTIMEFORMAT = '%Y-%m-%d %X'

from pymongo import MongoClient
mc = MongoClient("172.16.16.169",27017)
db = mc.users
def dateDiffInSeconds(date1,date2):
timedelta = date2 - date1
return timedelta.days*24*3600 +timedelta.seconds
date1 = datetime.datetime.now()
db.users.drop()
for iin 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. 測試結果:1000萬條資料寫入花費了10分3秒:

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

相關推薦

記錄MongoDB3.0.6版本wiredtigerMMAPv1引擎寫入耗時對比

MongoDB3.0.x的版本特性(相對於MongoDB2.6及以下): 增加了wiredtiger引擎: 開源的儲存引擎; 支援多核CPU、充分利用記憶體/晶片級別快取(注:10月14日剛剛釋出的3.0.7版本中,進一步改進了記憶體操作的效能); 基於B-TREE

記錄使用terminal進行git管理提交到Github的過程

忽略文件 pack com res ota pac sed clone fatal 1、環境的構建: 使用Mac系統自帶的Git進行版本管理存在,Git是系統的Xcode集成的 查看版本的命令: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px;

記錄Oracle VirtualBox 下 Centos 6.5 VM 磁盤擴容

vm磁盤擴容Oracle VirtualBox 創建的 Centos 6.5 VM 默認硬盤大小是8個G(未手工調整),現使用100%,需要擴容。[root@kaola ~]# df -hFilesystem Size Used Avail Use% Mounted o

spark2.2.0記錄資料傾斜的解決(擴容join)!

前言: 資料傾斜,一個在大資料處理中很常見的名詞,經由前人總結,現已有不少資料傾斜的解決方案(而且會發現大資料的不同框架的資料傾斜解決思想是一致的,只是實現方法不同),本文重點記錄這次遇到spark處理資料中的傾斜問題。 老話: 菜雞一隻,本人會對文中的結論負責,如果有說錯的,還請各位批評指出

記錄mysql由5.6升級到5.7出現的異常---Expression #23 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'c.commentCount' which is

### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #23 of SELECT list is not in GROUP BY clause an

記錄Python下Tensorflow安裝過程,1.7帶GPU加速版本

最近由於論文需要,急需搭建Tensorflow環境,16年底當時Tensorflow版本號還沒有過1,我曾按照手冊搭建過CPU版本。目前,1.7算是比較新的版本了(也可以從原始碼編譯1.8版本的Tensorflow)。 安裝步驟: 不能急於求成,安裝任何東西前都應該先閱讀使用者手冊與FAQ,弄清軟體依賴與安裝

ubuntu常用命令及操作,包括安裝CUDA 記錄Python下Tensorflow安裝過程,1.7帶GPU加速版本

chmo 777 Document 這裡Document是一個資料夾,資料夾中還有好多子檔案,可以發現執行了這條指令以後,其子資料夾的許可權並沒有改變。 要想改變其子資料夾的許可權,應該執行 chmod -R 777 Document/ ubuntu desktop的英偉達CUD

記錄令人心碎的 elasticsearch5.6 伺服器的搭建

前言:      最近想搭一個elasticsearch伺服器,因為之前用的是solr。這次想換個用用,沒想到在搭建的過程遇到兩個問題困擾我多時。 錯誤1: max file descriptors [4096] for elasticsearch proc

React Native 大版本升級過程——從0.40到0.59

去年把公司幾個react native 相關的專案升級了下,已經過去一段時間了,這裡系統整理下之前的整個過程。 背景 之前到公司的時候發現公司用的還是0.40的版本,據瞭解,當時專案做的比較早,導航用的是自帶的路由庫,狀態管理用的是 mobx。到公司之前雖然有react native的相關經驗,不過當時官方

記錄記錄超長”

har 語句 類型 執行 如果 可能 事情 縮小 百度 Jdbc報錯“記錄超長”,百度一下推測可能是因為SQL過長導致;但是後來經過老杜指點,發現原來是因為字段(varchar 8000)超長導致; 解決問題的套路: 1. 首先在Sql的客戶端上執行代碼;如果不錯,說明還是

[邏輯漏洞]記錄挖洞

9.png 列表 一次 查詢 urn 找到 ima sting .com 陽光明媚的早上,turn on the PC and 隨意地瀏覽著以往漏洞列表,希望在裏面找到一些遺忘的痕跡。 果然,我發現一個被忽略的漏洞,一個暴露在外網的的一個接口,可以查詢該企業網站是否註冊了的

簡單記錄REDO文件損壞報錯 ORA-00333重做日誌讀取塊出錯

clas 後者 利用 實例恢復 poi cancel true cover html 一.故障描寫敘述 首先是實例恢復須要用到的REDO文件損壞 二、解決方法 1.對於非當前REDO或者當前REDO可是無活動事務使用下面CLEAR命令: 用CLEAR命令重建該日誌

記錄配置http跳轉https的過程

http https 網站跳轉 公司最近搞了一個數據運營平臺,這個平臺會以web界面的形式把各個數據展示出來,這個項目是我們一個經理的重點關照項目。把平臺模塊部署完畢並且啟動之後,又把這個平臺服務器的外網IP綁定到alkaid.lechange.com這個域名上,在瀏覽器裏輸入https://al

記錄concurrent mode failure問題排查過程以及解決思路

tails only cnblogs 策略 executor red execute incr run 背景:後臺定時任務腳本每天淩晨5點30會執行一個批量掃庫做業務的邏輯。 gc錯誤日誌: 2017-07-05T05:30:54.408+0800: 518534

記錄MySQL進程崩潰,無法重啟故障排查

not pool function 解決 variables fail data class 緩沖 最近程序在跑著沒幾天,突然訪問不了,查看應用進程都還在。只有數據庫的進程down掉了。於是找到日誌文件看到如下錯誤 2017-07-24 01:58:53 19934 [N

記錄處理https監聽不正確的過程

負載均衡 https 502 nginx 金山雲 今天開發反饋在測試金山雲設備的時候遇到了這樣的一個現象:wget https://funchlscdn.lechange.cn/LCLR/2K02135PAK01979/0/0/20170726085033/dev_201707260850

記錄基於LV塊做存儲介質的KVM擴容過程

kvm擴容 基於lv的kvm擴容 kvm硬盤擴容 從下圖可看出盤已經不夠用了然後到宿主機執行LVM擴展Lv 擴充過程略然後擴容完,在虛擬機上執行fdils –l在宿主機擴容的LV在虛擬機裏已經有容量顯示,但我們的分區仍然沒有被顯示出來還是原來的310G因為這個分區在分時考慮到後期的擴充,所以用了G

記錄服務器被攻擊

服務器 攻擊 肉雞 公司一臺服務器從某一個時間開始,突然在每天不定期出現磁盤io和進程數的告警,初期進行查看,並未發現問題,暫時擱置。 每次告警時間都很短暫,所以很難在系統出現告警時登錄查看。而且由於在忙其他事情,這件事也一直沒有仔細去查。 登錄檢查的時候發現有一個分區磁盤滿了

記錄https證書申請失敗的案例

hydra tor 一次 申請 目錄 tin site text auto 部分站點由於使用了大量的域名,會導致 auto-ssl 配置的內存不夠用,導致證書申請失敗。需要做以下調整 nginx.conf 中 lua_shared_dict auto_ssl 調整為 128

記錄mysql 5.7 max_allowed_packet修改失敗的問題

packet for query is too large (2010 > 1024) mysql 5.7 max_allowed_packet今天我的客戶給我反饋說報錯 ### Error querying database. Cause: com.mysql.jdbc.PacketTooBigEx