2015中国数据库大会Mongodb分享

标签: 中国 数据库 mongodb | 发表时间:2015-04-27 07:01 | 作者:u013896457
出处:http://blog.csdn.net
本次分享由MongoDB大中华区技术顾问分享。“老人家”上来就问Mongo是什么意思,猜中有奖,还号称自己是最牛的MongoDB专家(在风筝冲浪圈子里…大家都懂的)。相信大家都不知道,容易理解为芒果(英文应该是mango)。实际上mongo是由这个英文humongous演变来的,表示“巨大的”的意思。

本次分享主要是介绍了MongoDB的3.0版本,对其性能提升进行内幕解密。
首先介绍了MongoDB的主要功能:
(1)自动复制高可用
     MongoDB有3中配置方式:单机、主从和复制集(replicat),复制集可以实现数据读写分离,并保持数据库集群自动复制实现自动容灾和高可用性。
(2)二级索引、动态查询
     MongoDB二级索引是用B树(B-tree)实现的,B树索引其实就是大多数关系型数据库的默认索引。
  动态查询:MongoDB支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌对象和多维数组。
(3)聚合框架、MapReduce
     MongoDB的聚合框架,就是把一系列特殊操作符作用于一个集合,可以替代MapReduce,并用于一般的聚合操作。
(4)企业级安全
(5)地理空间索引
     关于LBS相关项目,一般会存储每个地点的经纬度的坐标,如果要查询附近的场所,则需要建立索引来提升查询效率,MongoDB专门针对这种查询建立了地理空间索引。
(6)GridFS,MongoDB文件存储系统
     MongoDB的GridFS功能,性能没有传统的文件系统高,建议使用文件系统来存储文件,再用MongoDB来存储该文件的元数据。
(7)自动分片、水平扩展
     自动分片功能支持水平的数据库集群,可以动态添加额外的机器。
(8)文档模型
  将一个对象信息用一个文档存储起来的模型。我想这也是为啥MongoDB不能使用join联表查询的原因吧~
     
MongoDB 2.8(2.8版本直接跳到3.0版本。为什么将2.8命名为3.0?唐建法表示2.8有了极大的增强,用2.8有点委屈,因此MongoDB市场部主导命名为3.0。)版本开始引入支持Latch-free、Non-blocking算法的WiredTiger储存引擎MMAP。所以在使用之前必须加上wiredtiger参数。
MongoDB3.0提升:
(1)写性能:7x-10x,提升了7到10倍写速度
(2)数据压缩:30%-80%,是原有数据的30%-80%
(3)运维:95%,运维成本减少95%,主要集中在集群
听说是:因为有了WiredTiger存储引擎,MongoDB3.0才能有文档级别的并行控制,即使处理频繁写入任务,数据库依然能维持效能一定的稳定度和可预测性。

这次3.0的发布,MongoDB官方也同步发布了一份性能测试报告,这绝对是MongoDB有史以来第一份官方测试报告。
并发量:

在YCSB(NoSQL测压工具)测试中,MongoDB3.0在多线程、批量插入场景下较之于MongoDB2.6有大约7倍的增长。第二次测试比较了两个系统上 95%读取和5%更新的场景。可以看到WiredTiger 有4倍多的吞吐量。相比于纯插入场景,这次的性能提升没有那么显著,因为写操作只占所有操作的5%。最后,对于读写操作平衡的场景,可以看到 MongoDB3.0有6倍的并发率。这比刚才看到的95%读 的4倍提高要好一些,因为这里有更多的写操作。

响应时长:

他们通过读密集型的工作负荷来比较更新响应延迟的95th和99th百分位数 。在MongoDB3.0中更新延时显著改善了,在95th和99th百分位数中几乎减少了90%。

MongoDB2.6和3.0各自的文档级别并发控制实现:
2.6版本使用悲观锁,即库级锁(实际上并不是我们理解的Lock,用Lock来形容感觉太大太重的,2.6版本的库级锁应该理解成latch,即在修改数据时,会加上的一个轻量的行锁),而3.0使用了乐观锁(MVCC):何为悲观锁,乐观锁?
   悲观锁:悲观锁假定其他用户企图访问或者修改你正在访问或者修改的对象的概率是很高的。因此在悲观锁的环境里,在你开始改变此对象之前就将该对象锁住,并且直到你提交了所作的更改之后,才释放锁。
所以悲观锁加锁的时间会比较长,这样可能就会长时间的限制其他用户的访问,也就是说,悲观锁的并发访问性能不好。所以2.6版本在性能上不去也就是这样原因。
2.6中采用的是库级锁,读操作和写操作为互斥操作,大大影响了数据库的整体性能。

3.0版本采用了乐观锁:
   乐观锁:乐观锁则认为其他用户企图改变你正在修改的对象的几率是非常小的。因此乐观锁直到你准备提交所作的更改时才将对象锁住。
可见乐观锁加锁的时间要比悲观锁短,乐观锁可以利用较大的锁粒度获得较好的并发访问性能。这也是3.0读写性能提升并且实现高并发控制的原因之一。

当然也有需要注意的:
(1)没有32位支持
(2)和2.6数据文件不兼容
(3)Journal默认不会及时书刷盘,系统宕机的话,会丢失最多100MB Jouranl数据
(4)Stall现象还会存在 - 特别是IO资源不够的情况下
(5)Windows上性能指标不如Linux

最后提供MongoDB社区教程:
中文社区:http://www.mongoing.com
在线教程:http://university.mongodb.com
作者:u013896457 发表于2015/4/26 23:01:34 原文链接
阅读:9 评论:0 查看评论

相关 [中国 数据库 mongodb] 推荐:

2015中国数据库大会Mongodb分享

- - CSDN博客推荐文章
本次分享由MongoDB大中华区技术顾问分享. “老人家”上来就问Mongo是什么意思,猜中有奖,还号称自己是最牛的MongoDB专家(在风筝冲浪圈子里…大家都懂的). 相信大家都不知道,容易理解为芒果(英文应该是mango). 实际上mongo是由这个英文humongous演变来的,表示“巨大的”的意思.

MongoDB数据库勒索,中国受害者数量超乎你的想象,SOS!

- - 博客园_新闻
今天,雷锋网编辑在刷朋友圈时,看到腾讯安全专家召唤提到:国内已经出现多起针对 MongoDB、ElasticSearch 的攻击勒索案例了. 最近在国外大火的 MongoDB 勒索已经到中国了. 对此,雷锋网马上与召唤取得联系,得知仅国内某安全公司近期就检测到 4 起针对国内 MongoDB 、ElasticSearch 进行的勒索案例.

MongoDB数据库文档大全

- - CSDN博客推荐文章
MongoDB数据库简单介绍. MongoDB是一个高性能 ,开源 ,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储模式. MongoDB是用C++开发, 提供了以下功能:. 面向集合的存储:适合存储对象及JSON形式的数据. 动态查询:Mongo支持丰富的查询表达式.

Memcache缓存与Mongodb数据库的优势和应用

- - C++博客-牵着老婆满街逛
转载自: http://www.jzxue.com/shujuku/shujukuzonghe/201005/19-3807.html. 先说说自己对 Memcache和Mongodb的一些看法,主要是抛砖引玉了,希望看到大家的意见和补充. Memcache的优势我觉得总结下来主要体现在:. 可以由10台拥有4G内存的机器,构成一个40G的内存池,如果觉得还不够大可以增加机器,这样一个大的内存池,完全可以把大部分热点业务数据保存进去,由内存来阻挡大部分对数据库读的请求,对数据库释放可观的压力.

从MongoDB IPO谈谈企业级数据库市场

- - IT瘾-bigdata
作者:巨杉数据库 联合创始人&CTO王涛. 10月20日,NoSQL数据库MongoDB在NASDAQ正式 IPO,当日收于 32.07 美元. 截至10月27日,MongoDB报收30.89美元,公司市值保持在15亿美元左右,可以说是分布式数据库的“第一股”. 作为同样数据库行业的一员,也是分布式数据库产品厂商,巨杉一直关注MongoDB的发展.

NOSQL数据库大比拼:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase

- - 博客园_Ruby's Louvre
话说,尽管 SQL 数据库一直是我们IT行业中最有用的工具,然而,它们这样在行业中超过15年以上的“转正”终于就要寿终正寝了. 现在,虽然关系型数据库仍然无所不在,但它越来越不能满足我们的需要了. 但是,各种 "NoSQL" 数据库之间的差异比当年众多关系型数据库之间的差异要大许多. 这就加大了人们在建设自己的应用是选择合适的数据库的难度.

非关系式数据库MongoDB获1.5亿美元融资,估值达12亿美元

- - 36氪 | 关注互联网创业
据彭博社 报道,非关系式数据库初创企业MongoDB在最新一轮的融资中获得了1.5亿美元的VC资金,其估值也已达到12亿美元. MongoDB是一种对象式数据库,据 介绍,在非关系式数据库中,这种数据库是功能最丰富、最像关系数据库的一种:. MongoDB是一个基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案.

MongoDB与传统数据库的使用区别——批量插入与批量查询

- - 数据库 - ITeye博客
我在百X知道上回答问题时经常遇到类似与这样的问题:MongoDB有没有像MySQL一样的ODBC驱动. MongoDB能不能像MySQL一样获取字段名称或类型. 我的回答是:不行,因为MongoDB不是MySQL. 这个回答显得MongoDB太弱了,我的原意是你不能要求一个物理优秀教师帮你辅导数学,也许他能做到基本的教学,但他很难做到优秀数学教师那么全面.

[mongodb] java操作mongodb

- - 数据库 - ITeye博客
           //实例化Mongo对象,连接27017端口.                               //连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立. //从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立.