MongoDB 2.8存储引擎FAQ

2.8-rc0在光棍节的周二发布了,忙着血拼的童鞋们多半没有注意到哈。 2.8的最主要的新功能是支持两个存储引擎: MMAP 和 WiredTiger。其中WiredTiger 支持压缩和文档级锁, MMAP支持集合级锁。 其他更新请看 http://docs.mongodb.org/manual/release-notes/2.8/

以下是关于存储引擎的一些FAQ

存储引擎是什么东东?

存储引擎是数据库管理系统的一个重要组成部分。它的主要职责就是负责把数据存储到硬盘和把数据从硬盘检索出来。MySQL和Riak均支持多个不同的存储引擎。不同的存储引擎对不同的应用需求有特别的优化。如某个存储引擎可以是专为高并发写设计的,而另一个则是为高压缩率设计从而达到节省磁盘空间的目标。

MongoDB为什么要引入存储引擎API?

MongoDB 从最初版本一直到2.6都只支持一种基于内存映射技术的存储引擎,现在叫做MMAP v1。随着MongoDB的广泛普及,仅有一个存储引擎方案已经很难满足各种各样的场景需求,如压缩,高并发,文档级锁,内存数据库性能等等。引入API可以让MongoDB,技术合作伙伴,和MongoDB 用户根据性能,可用性,高效性,容量及扩展性等具体需求开发适合于这些场景的存储引擎,从而进一步增加MongoDB的适用性。

MongoDB2.8会支持什么样的存储引擎?

以下两个是2.8 支持的2个存储引擎

  • MMAP v1 – 目前的基于内存映射的存储引擎。MMAP v1在2.8支持collection level locking,并在2.8内继续作为MongoDB的默认存储引擎。
  • WiredTiger – 这是一个BerkerlyDB 架构师们开发的一个存储引擎。主要特点为高性能写入,支持压缩和文档级锁。

 

其他一些正在考虑支持的存储引擎(会在2.8之后的版本实现):

  • RocksDB – Facebook 开发的优化写操作的一个存储引擎
  • TokuFT – Tokutek开发。这个引擎也在 MySQL (TokuDB) 和TokuMX下使用
  • InMemoryExperiment – MongodDB 开发的内存数据库,尚在试验中
  • FusionIO – 跳过文件系统和OS直接访问FushionIO存储介质,提供高效读写

将来版本默认的存储引擎会是什么?

在2.8 MMAP v1 还仍会是默认的存储引擎。3.0以后WiredTiger很可能会成为默认存储引擎。

如何升级到新的存储引擎?

用户需要对既有的数据执行一个升级操作以使用新的WiredTiger存储引擎。详细的升级文档将随2.8一起发布。基本过程就是通过加一个新的采用新的存储引擎的复制集成员并让之完成initial sync,然后逐渐替换掉老的成员。2.8里对复制集的initial sync有不少性能改善,所以增加一个新成员会比之前速度会有较大提升。

如果我已购买了MongoDB的服务,这个对WiredTiger存储引擎有效么?

对的。没有影响。

 

WiredTiger存储引擎发现bug,应该找谁?

MongoDB

 

MongoDB对WiredTiger拥有什么样的授权?

MongoDB 从WiredTiger Data Engine 获得了对源代码的永久授权。

我可以在复制集混用不同的存储引擎吗?

可以的。用户可以在复制集里混用存储引擎。你需要注意一些额外事项,如Oplog的大小要根据各个存储引擎的特点而做不同的计划。另外,备份恢复可能会变得复杂一点因为备份数据可能是一个存储引擎的格式而在恢复的时候可能要求恢复到另一个存储引擎里去。

 

这个对MongoDB MMS有什么影响?

MMS 和即将发布的 OpsManager 会有以下功能增强:

  • 创建或修改MongoDB实例时候可以选择使用哪一种存储引擎
  • 创建或修改复制集的时候可以混用不同存储引擎
  • 从2.6升级到2.8,然后切换存储引擎

 

使用新的存储引擎需要修改已有程序吗?

WiredTiger 和目前的MMAP v1 存储引擎是100%兼容的。用户不需要对程序做任何的修改便可直接使用。有一些状态监控的命令会有一些调整,这些在2.8里会有具体的文档说明。此外,由于WiredTiger会对写性能有极大的提升,以及文档锁的实现,以前的微分片,分库分表及其他的为提高MMAPv1并发率而实现的变通方案将不再需要。我们强烈建议在选择一个存储引擎的时候要把性能测试作为一个必不可少的步骤包含在选型过程中。

什么时候应该用 WiredTiger?  MMAP v1?

一般来说,WiredTiger会对大部分应用场景提供更好的性能表现。在2.8中 MongoDB会支持复制集中存储引擎的混合部署,用户可以很容易地在两个存储引擎中切换。这样可以在测试过程中选择更加合适自己的方案。

 

WiredTiger压缩率有多少?

目前这个还没有最终确定。2.8 rc0里已经支持Snappy和Zlib压缩并默认开启Snappy压缩。

 

WiredTiger的并发能力比MMAP v1高多少?

这个取决于使用场景。我们会在2.8 发布时提供一些这方面的参考。

 

WiredTiger支持数据模式检验,ACID事务,国际语言支持和快照。这些在MongoDB里面都会支持吗?

不一定所有的都会支持。有一些功能如压缩会比较容易实现并已经在2.8 里实现(2.8 已经支持 zlib 和Snappy 压缩),而其他的一些功能则还没有完全和MongoDB整合起来。然而WiredTiger的这些既有功能将大大帮助MongoDB将来版本里面实现这些功能。

我还需要在一台机器上运行多个MongoDB实例来充分利用我的硬件资源么?

如果使用 MMAP v1, 微分片技术在适当的场景下还可以继续使用。对于WiredTiger用户不再需要微分片。因为文档级锁的引入,一个MongoDB实例就可以充分利用所有系统资源。

2.8 什么时候发布?

目前计划是2014年12月。

MongoDB 2.8存储引擎FAQ》有1个想法

发表评论