Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

MongoDB World 2016参会全记录

$
0
0

上周和 @叶翔 一起参加了在 纽约举行的 MongoDB World 2016 ,MongoDB作为一个NewSQL数据库越来越受关注,这一点从 google趋势 、 百度指数 都可以看出来。


MongoDB World 2016参会全记录

本次会议举办得非常用心,演讲主题丰富,涵盖了MongoDB产品规划、内部实现、用户案例、devops、driver使用等很多内容,能满足各种不同岗位听众的需求。我目前在阿里云数据库团队主要负责MongoDB源码方面的开发工作,所以重点会放在MongoDB内部实现的部分,接下来跟大家分享下参会的一些重要内容及感悟。

MongoDB 3.4 preview

MongoDB的版本迭代非常快,我接触MongoDB还不到一年的时间,已经经历了MongoDB 3.0、3.2两个大版本, 云数据库 为了跟官方保持同步,已经使用了最新的3.2版本。大版本的发布,新功能改进上还是非常给力的,比如3.2相比3.0版本,重大的改进包括:

默认的存储引擎从mmapv1切换为wiredtiger,提升性能的同时也能通过压缩降低存储成本 复制集的选举使用raft协议,可靠性进一步增强 支持文档校验功能(document validation) 支持left join($lookup) 支持in memory存储引擎(企业版),MongoDB支持复制集各成员使用不同的存储引擎,应用场景的想象空间很大

本次会议上介绍了下一个大版本3.4里的主要特性

全量同步(initial sync)改进,目前如果initial sync中间断开了,需要整个重来,改进后并行度提高,而且断开后能够接着上次的进度继续同步。 支持自定义文档排序规则(比如按ascii、utf8来排序) 只读视图(readonly view) recursive lookup,目前只支持简单的left join mongodb compass(企业版)在geo index、explain、crud操作上有很大的改进 bi connector功能提升(企业版)

总体看来,MongoDB还是很注重社区反馈的,像collation、只读视图的功能都是社区vote比较多的特性;企业版本支持上,3.2里只有企业版支持的功能主要包括审计日志、数据加密、mongodb compass/ops manager、bi connector,in memory存储引擎,大都是数据库外围的增值功能,放在商业版本里很能理解,但in memory存储引擎放到企业版我觉得很意外。

数据库引擎是MongoDB核心的组成部分,开发一个新的引擎很复杂的,而且引擎在各个场景下是否能表现得符合预期,不经过大量的使用验证是很难稳定的,以wiredtiger为例,wiredtiger在作为mongodb存储引擎之后,社区的各种使用案例遇到的问题也帮助wiredtiger改进了很多;希望官方能把in memory引擎放出来,让社区一起来提升它,这样MongoDB就能适应于更多场景了,比如在缓存的场景代替redis…成为真正强大的NewSQL。

MongoDB Atlas

本次大会最重量级的内容就是 MongoDB Atlas Cloud Service 的发布,MongoDB公司正式提供Database-as-a-service服务模式,用户可以选择在AWS(后续可能支持azure,gcp)上部署MongoDB云服务,模式跟现在的 mlab 类似。


MongoDB World 2016参会全记录
Async network framework 这个主题主要介绍MongoDB 3.2异步网络框架的改造,Mongos跟Mongod的通信,典型的流程是connect ==> auth ==> [send request ==> recv response] * N ==> close,在之前的版本里整个过程是按顺序同步进行的,总体效率很低。

在3.2里实现了Async network framework,采用状态机转换的模式实现异步通信。一个线程池负责做实际的工作,并处理状态转换。请求的状态可分为『connect、auth、send、recv、close』等状态,connect状态会触发线程执行connect动作,并在连接成功的回调函数里将请求设置为auth状态,然后auth触发认证过程,成功后进入send状态,依此类推…整个过程异步化。


MongoDB World 2016参会全记录

目前这个网络框架主要用于mongos与mongod、复制集mongod之间的通信,driver到MongoDB之间还是connection per thread的模式,跟MongoDB的工程师交流了下,这块有改进计划但不在3.4里。

Async network framework在设计实现时还考虑了代码可读性方面的问题,异步代码是非常难读的,各种回调很容易把人绕晕;MongoDB在在实现时大量使用了C++ 11的lamda表达式,尽可能将异步的代码写得『同步化』,以提升代码可读性。

Raft Protocol in MongoDB

从3.2版本起,MongoDB使用raft协议来保证一致性,这个主题思远同学在之前中文社区的Webinar也分享过,有兴趣的同学直接去看中文的PPT及视频,不做过多介绍。


MongoDB World 2016参会全记录
Sharded cluster

这个主题主要介绍了Sharded cluster的config server从『


Viewing all articles
Browse latest Browse all 6262

Trending Articles