Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。
启蒙教育也紧追其步伐 已经教程内容更新至 3.0 版本。教程的的实例在 3.0版本中测试通过。
以下内容为 3.0 版本的新增特性:
插件式存储引擎API
MongoDB3.0引入了插件式存储引擎API 为第三方的存储引擎厂商加入MongoDB提供了方便 这一变化无疑参考了MySQL的设计理念。目前除了早期的MMAP存储引擎外 WiredTiger和RocksDB均已完成了对MongoDB的支持 前者更是在被MongoDB公司收购后更是直接引入到了MongoDB3.0版本中。插件式存储引擎API的引入为MongoDB丰富自己武器库以处理更多不同类型的业务提供了无限可能 内存存储引擎、事务存储引擎甚至Hadoop在未来都有可能接入进来。
WiredTiger存储引擎
如果说插件式存储引擎API为MongoDB3.0打造了一个武器库 那么WiredTiger绝对是武器库中第一枚也是最重要的一枚重磅炸弹。因为MMAP存储引擎自身的天然缺陷(耗费磁盘空间和内存空间且难以清理 库级别锁) MongoDB为数据库运维人员带来了极大痛苦 甚至一部分人已经开始转向TokuMX 尽管后者目前也不甚稳定。意识到这一问题的MongoDB 做出了有钱任性的决定 直接收购存储引擎厂商WiredTiger 将WiredTiger存储引擎集成进3.0版本(仅在64位版本中提供)。那么这款走到聚光灯下的存储引擎究竟具备哪些值得期待的特性呢?
1、文档级别并发控制
WiredTiger通过MVCC实现文档级别的并发控制 即文档级别锁。这就允许多个客户端请求同时更新一个集合内存的多个文档 再也不需要在排队等待库级别的写锁。这在提升数据库读写性能的同时 大大提高了系统的并发处理能力。关于这一点的效果从监控工具mongostat就可以直接体现出来 旧版本的监控指标会有lockeddb这一项(该项指标过高是mongo使用人员的一大痛点啊) 而新版的mongostat已经看不到了。
MongoDB 2.4.12版本
$/home/mongodb/mongodb-linux-x86_64-2.4.12/bin/mongostat –port55060insert query update delete getmore command flushes mapped vsize resfaults locked db idxmiss % qr|qw ar|aw netIn netOut conntime*0 *0 *0 *0 0 1|0 0 18g 18.3g 16.1g 0 ycsb:0.0% 0 0|00|0 62b 2k 1 13:04:01*0 *0 *0 *0 0 1|0 0 18g 18.3g 16.1g 0 ycsb:0.0% 0 0|00|0 62b 2k 1 13:04:02*0 *0 *0 *0 0 1|0 0 18g 18.3g 16.1g 0 ycsb:0.0% 0 0|00|0 62b 2k 1 13:04:03
MongoDB 3.0 rc8版本
$/home/mongodb/mongodb-linux-x86_64-3.0.0-rc8/bin/mongostat –port55050insert query update delete getmore command % dirty % used flushesvsize res qr|qw ar|aw netIn netOut conntime*0 *0 *0 *0 0 1|0 0.0 42.2 0 30.6G 30.4G 0|0 0|0 79b 16k 113:02:38*0 *0 *0 *0 0 1|0 0.0 42.2 0 30.6G 30.4G 0|0 0|0 79b 16k 113:02:39*0 *0 *0 *0 0 1|0 0.0 42.2 0 30.6G 30.4G 0|0 0|0 79b 16k 113:02:40
2、磁盘数据压缩
WiredTiger支持对所有集合和索引进行Block压缩和前缀压缩(如果数据库启用了journal journal文件一样会压缩) 已支持的压缩选项包括:不压缩、Snappy压缩和Zlib压缩。这为广大Mongo使用者们带来了又一福音 因为很多Mongo数据库都是因为MMAP存储引擎消耗了过多的磁盘空间而不得已进行扩容。其中Snappy压缩为数据库的默认压缩方式 用户可以根据业务需求选择适合的压缩方式。理论上来说 Snappy压缩速度快 压缩率OK 而Zlib压缩率高 CPU消耗多且速度稍慢。当然 只要选择使用压缩 Mongo肯定会占用更多的CPU使用率 但是考虑到Mongo本身并不是十分耗CPU 所以启用压缩完全是值得的。
此外 WiredTiger存储方式上也有很大改进。旧版本Mongo在数据库级别分配文件 数据库中的所有集合和索引都混合存储在数据库文件中 所以即使删掉了某个集合或者索引 占用的磁盘空间也很难及时自动回收。WiredTiger在集合和索引级别分配文件 数据库中的所有集合和索引均存储在单独的文件中 集合或者索引删除后 对应的存储文件随即删除。当然 因为存储方式不同 低版本的数据库无法直接升级到WiredTiger存储引擎 只能通过导出导入数据的方式来实现。
MongoDB 2.4.12版本
[mongodb@mongo-data-emergency-001.m6.momo.com mongodb_2_4_12]$lldrwxrwxr-x 3 mongodb mongodb 4096 2月 25 19:03local-rwxrwxr-x 1 mongodb mongodb 6 2月 25 19:04mongod.lockdrwxrwxr-x 2 mongodb mongodb 4096 2月 27 18:30_tmpdrwxrwxr-x 3 mongodb mongodb 4096 2月 27 18:39ycsb[mongodb@mongo-data-emergency-001.m6.momo.com mongodb_2_4_12]$ llycsb/drwxrwxr-x 2 mongodb mongodb 4096 2月 27 18:39_tmp-rw——- 1 mongodb mongodb 67108864 2月 27 18:57ycsb.0-rw——- 1 mongodb mongodb 134217728 2月 27 18:57ycsb.1-rw——- 1 mongodb mongodb 2146435072 2月 27 18:57ycsb.10-rw——- 1 mongodb mongodb 2146435072 2月 27 18:57ycsb.11-rw——- 1 mongodb mongodb 2146435072 2月 27 18:57ycsb.12-rw——- 1 mongodb mongodb 2146435072 2月 27 18:39ycsb.13-rw——- 1 mongodb mongodb 268435456 2月 27 18:57ycsb.2-rw——- 1 mongodb mongodb 536870912 2月 27 18:57ycsb.3-rw——- 1 mongodb mongodb 1073741824 2月 27 18:57ycsb.4-rw——- 1 mongodb mongodb 2146435072 2月 27 18:57ycsb.5-rw——- 1 mongodb mongodb 2146435072 2月 27 18:57ycsb.6-rw——- 1 mongodb mongodb 2146435072 2月 27 18:57ycsb.7-rw——- 1 mongodb mongodb 2146435072 2月 27 18:57ycsb.8-rw——- 1 mongodb mongodb 2146435072 2月 27 18:57ycsb.9-rw——- 1 mongodb mongodb 16777216 2月 27 18:40ycsb.ns
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题