记录一次MongoDB3.0.6版本wiredtiger与MMAPv1引擎的写入耗时对比

转载 2016年05月31日 10:21:58
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*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:

#./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快一些,后续再继续其他方面的性能测试。

相关文章推荐

MongoDb 的 MMAPv1 和 WiredTiger 存储引擎空间对比(800万文档 )

mongodb 的 MMAPv1 和 WiredTiger 存储引擎空间对比(800万文档 )

把mmapv1存储引擎存储的mongodb3.0数据库数据复制到WiredTiger存储引擎的mongodb3.2中

mongodb3.0在mmapv1的存储引擎基础上添加了一个新的存储引擎WiredTiger。但是3.0的默认存储引擎依旧是mmapv1,因此我们项目之前也就用的默认方式。但是mongodb更新实在太...

MMAPv1和WiredTiger区别

mongoDB3.0之前使用的存储引擎只有一个,那就是MMAPv1,但是在3.0之后,加入一款新的存储引擎,那就是WiredTiger相对于MMAPv1,MongoDB可以压缩最大80%的空间,这样可...

内存溢出 out of memory与内存泄露 memory leak

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 ...
  • gjy211
  • gjy211
  • 2016年07月11日 12:06
  • 710

淘宝的数据库拆分(TDDL)

淘宝的数据拆分历程 系 统刚开始的时候,因为系统刚上线,用户不多,那个时候,所有的数据都放在了同一个数据库中,这个时候因为用户少压力小,一个数据库完全可以应付的了,但是 随着运营那些哥们辛苦的呐喊和...

记录一次MongoDB3.0.6版本wiredtiger与MMAPv1引擎的写入耗时对比

一、业务需求:   公司某个APP应用的数据库已经实现了日志与业务的垂直分割,将原有的一套RAC,拆分成两套,目前数据库暂时还比较稳定,服务器负载也在正常范围内,但是现有用户数450万,日活跃...

Mongodb(1)——存储引擎WiredTiger的使用

DatabaseHolder:负责创建、关闭、获取DB。 Database:Database的入口,是Database的类的实现,提供了Collection的创建销毁接口。 StorageEngi...
  • kturing
  • kturing
  • 2016年11月25日 11:08
  • 362

Mongodb Wiredtiger存储引擎实现原理

按照Mongodb默认的配置,WiredTiger的写操作会先写入Cache,并持久化到WAL(Write ahead log),每60s或log文件达到2GB时会做一次Checkpoint,将当前...
  • jumewo
  • jumewo
  • 2016年02月16日 14:05
  • 1690

NoSQL_MongoDB_文档的增加与删除 与 MMAPv1内存分配策略

整理自极客 内容简介 MongoDB数据库操作与传统关系型数据库的对比 MongoDB 插入操作 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:记录一次MongoDB3.0.6版本wiredtiger与MMAPv1引擎的写入耗时对比
举报原因:
原因补充:

(最多只允许输入30个字)