MongoDB World 2017 参会全记录

作者简介

张友东,阿里云数据库技术专家,Mongoing中文社区联合发起人,主要关注分布式存储、NoSQL数据库等技术领域,目前主要从事MongoDB云数据库的研发工作,致力于让开发者用上最好的MongoDB云服务,本次给大家分享上周(6.19-6.21)在芝加哥参加 MongoDB Wolrd 2017 的一些收获。

去年的会议场景还历历在目,MongoDB World 2016参会全记录 ,感叹时光飞逝。

会议安排

Pre conference 6.19

  • Advacacy summit, Pattern summmit, Workshop(SQL opt, security, ops manager, data modeling)

会议的前一天也有不少的议题,基本都是邀请制的,包括开发者峰会、合作伙伴峰会、以及一系列的收费workshop。

Conference 6.20 – 6.21

  • Keynotes (09:00 – 10:50, 17:00 – 18:30)
  • Session (MongoDB production intro, MongoDB internal, user case)

会议2天的安排主要分为keynotes 和 session,keynotes 是所有的参会者(1000+)聚在一块,主要内容是MongoDB公司的产品发布,产品新特性介绍,以及合作伙伴的主题演讲; Session 部分内容很丰富,每个 Session 约40分钟,每个时间段都有多个不同主题的 Session 可选,内容包括 MongoDB 产品,MongoDB 内部机制,用户使用案列等。

Just for fun

  • After party: 第一天会议结束有一个after party 的活动,把参会者拉到一个类似酒吧的地方,听音乐、吃东西、聊天 …
  • Fun run: 第二天的早上有一个晨跑的活动,
  • Taste beer:会议结束后,会提供各种类型的啤酒供大家品尝,参会者喝酒聊天,很有意思,可惜我对啤酒完全不感兴趣。

如此丰富多彩的活动,我只能说老外真会玩。难得出远门一趟,加上好奇心比较重,上面所有的活动我去都参加了,今年跑步带了装备,3 miles 妥妥的。

App

跟去年一样,今年大会也开发一款 APP,方便大家在手机上安排会议内容,并可以对speaker做点评以及提问,还能方便的认识其他的参会者,就是一个简单版本的朋友圈。

2017_06_20_203942

After party 活动现场

DC4UReTXcAEnTDX

Taste beer 活动现场

Advocacy summit

通过 TJ 的介绍,联系到负责 Advocacy summit 的同学,参加了本次的 advocacy summit 活动,主要是 MongoDB 社区比较活跃的一些开发者聚在一块,听 MongoDB 的CXO 们聊未来的一些技术方向,针对一些 topic 进行技术讨论,一共50人左右,圆桌的形式,一整天吃饭、讨论都在这个房间了,收获很大。(注:被右后方大胖哥挡住的人就是我,[捂脸])

DCsJ4IjW0AAgf_I

Atlas

MognoDB 公司在去年 MongoDB world 的时候发布来 DBaas 服务 Atlas,能基于 AWS 来构建 MongoDB 云服务,Atlas 经过一年的发展,多了许多新特性,同时还有很多特性正在开发中,非常值得期待。

Atlas feature

  • Live migration,在线迁移,可以将你原来的实例数据无缝的迁移到 Atlas
  • Queryable backups, 备份集支持直接查询,这样当只需要部分数据时,可以直接到备份集里查询出来,而不用恢复整个数据集
  • 支持AWS、Azure、GCP,这个特性比较给力,基本上国外主要的云平台都支持上了,不论你在哪个云上,都可以方便的使用 Atlas 的服务。

Atlas future

  • Perfromance advisor 支持智能的性能分析及建议
  • M2 大规格实例的支持
  • Full CRUD in data explore 能在atlas控制上直接操作数据,执行命令等,数据库管理员的福音
  • Hosted BI connector BI分析进一步加强
  • MongoDB charts integration 整合 MongoDB chart,方便的根据数据出图形报表
  • Cross Cloud 未来 Atlas 能跨多个云服务商部署,可能一个复制集,Priamry 在 AWS 上,Secondary 在 Azure 上
  • LDAP authentication、KMIP integration 安全方面的加强

另外今年也发布了新的产品 MongoDB stitch,能更方便的基于 MongoDB 构建应用,MongoDB stitch 目前只能在 Atlas 上使用。

Storage

Wiredtiger 团队的负责任介绍了 MongoDB 存储方面的一些开发计划

  • 3.6 会支持存储引擎级别的 upgrade/downgrade,主要是有新压缩算法的支持、以及考虑将大文档的更新只存储「改变的内容」,这样可能会导致存储格式发生变化,upgrade/downgrade 就是为了支持数据级别的版本升降级。
  • 3.8 会支持transaction,同时在大量集合、大量更新的场景做优化,然后完全废弃 mmapv1 引擎。
  • 4.0 及以后的版本,MongoDB 会支持 LSM 来适应大量写入场景,以及针对分析场景做 column store 的支持,同时还会考虑在移动领域,以及云存储场景的应用。

Drivers

3.6 版本里,Driver 方面主要有几大改进

  1. 协议上的统一,MongoDB 的通信协议经过多次迭代改进,会在3.6进行统一,所有的请求走一种协议,并支持网络数据包的压缩(3.4已经支持snappy压缩,3.6会支持更多的压缩算法)。
  2. 支持 retryable write,所有的写都可重试,这样用户就不用担心写失败的场景,可以完全交由Driver处理(后面有个主题专门介绍)。
  3. Notification API,支持订阅数据库的所有修改,比如用户可以订阅指定集合的insert、update操作,当集合的数据发生变化时就会得到通知,一种典型的场景就是订阅oplog的修改,可以用于做增量备份,也可以将oplog应用到其他的地方,扩展更多的应用场景。

Unconference session

上述议题结束后,有一个 unconference 环节,议题大家现场提,每个人都可以提出想讨论的问题,每个人也可以对提出的议题投票,最后得票数比较多的议题会拿出来进行圆桌讨论,我提出向大家介绍一下 MongoDB 中国社区的发展情况,以及用户遇到的主要问题,将这些问题feedback给官方团队。

IMG_4264

China MongoDB community: Introduction and Feedbacks

2017_06_20_074315

第一次用英文做分享,居然完整的讲完了,大家对中国用户会一次活动有200+人表示非常震惊,并对我们社区的工作高度赞扬,感谢社区里每一位同学的努力付出。

Mongoing中文社区(mongoing.com)今年已经在杭州、深圳、北京、成都组织了四场用户交流会,后续我们将会组织更多的线上、线下的技术交流活动,给 MongoDB 的用户建立了一个良好的技术交流平台,大家可以关注「Mongoing中文社区」的公众号,后续的技术活动、干货文章会第一时间推送给你。

WechatIMG143_jpeg

Sessions

本次的 Session 内容丰富,每个时间段都有多个可选的topic,我主要关注 MongoDB internal、MongoDB schema design 等方面的主题。

Scale wiredtiger to 1m collections

这个topic里介绍 wiredtiger 如何支持100万个集合,wiredtiger 相比 mmapv1 有很大的性能提升,但在大量集合的场景,wiredtiger 的表现不如 mmapv1,是因为 wiredtiger 每个集合/索引都对应一个物理文件,对文件系统的性能依赖很大;而 mmapv1 将同一个数据库的数据合并存储在一块,不会产生大量物理文件。

Wiredtiger 在成为 MonogDB 存储引擎之后,发现很多最初的设计跟 MongoDB 的场景是不相匹配的,比如wiredtiger假设用户只会创建很少的table,也只有少量的线程会并发读写,而在 MongoDB 的场景里可能会有大量的集合,同时因为 MongoDB one thread per connection 的网络服务模型,会导致同时可能有大量的线程读写wiredtiger数据。

2017_06_20_110654

Wiredtiger 为了更好的支持大量集合的场景,主要做了如下改进

  1. cache handle 的管理,由原来的链表改为hash表,实现O(1)的查找和删除。
  2. eviction 和 checkpoint 的时候,考虑到大量集合的场景,而大量集合中可能只有少数集合是活跃的,会尽量高效的跳过未修改的集合数据。
  3. 增加 –groupCollecitons 选项,同一个数据库的所有集合及索引只会对应2个wiredtiger的table,一个用来存储数据,一个用来存储索引;这个特性目前还在开发中。

Session in MongoDB 3.6

这个topic 主要介绍 3.6 版本里即将引入 的 Session 特性,Driver 连接 MongoDB server时,可以先建立一个 Session,Session 的状态信息会存储到 server 端,即使 Client 断开重连,Session 的信息不会丢失,基于这个特性,在3.6里会实现

  1. Retryable write,因为 Session 信息在server端,所有的写操作在客户端都是可重试。
  2. Session 自动超时,能自动回收 Session 关联的所有资源
  3. 实现 cluster 级别的killOp,mongos 上的 Session,mongos 会自动跟 shard 上的 Session 关联起来,当用户 killOp 清理 mongos 上的Session操作时,mongos 会自动将 shard 上关联的 Session 操作也清理掉;用户不再需要连接到每个shard上去逐个 killOp。

2017_06_20_152426

Advanced schema design

这个 topic 主要介绍文档数据库常用的设计模式,其实这些模式都是比较通用的,在很多场合都适用。

Attribute

文档数据库最大的特点就是其灵活性,可以通过 field: value 来表达各种数据,在设计时field可以尽量抽象成 attribute,比如一个文档用于记录每个城市的气温。

{
   weather: 
   {
       wuhan_temp: 30
      hangzhou_temp: 28
      beijing_temp: 20
      ...
   }
}

这样做有个比较大的问题就是字段数量不确定,并且非常不便于索引,更好的方式应该是进一步抽象,提取出城市以及气温这2个Attribute,比如

{
    weahter[
    {city: "hangzhou",  temp: 30},
    {city: "wuhan", temp: 20},
    {.... }
    ]
}

这样改进后结构更清晰,而且能方便的针对 weather.city, weather.temp 建索引。

2017_06_20_115412

Subset

Subset 主要针对大文档,在有些场景,用户的文档可能很大,但需要访问/修改的部分可能很少,其中大部分内容都是静态的,并且很少被访问,这样的数据就没必要加载到内存,这样就可以通过 Subset 的方式,将静态很少被访问的数据以子集的方式存储到其他地方。比如下述文档

{
    field1: value1,
    field2: value2,
    ...
    filedN: { }  // very big, and rarely access
}

这是可以将filedN 存储到另外的集合,然后加上对应的引用,这样就只有经常需要访问的数据被加载到内存,内存利用的效率更高。

Computed

Computed 主要用于减少频繁需要的重复计算,比如针对某个集合,经常需要对集合的某个字段进行求和,这是就可以考虑在每次插入时,进行求和计算,并把计算结果存储下来,这样每次求和时就不用全表扫描来计算。

Approxmiation

Approxmiation 是 Computed 的改进,如果每次插入时更新计算结果开销太大,并且应用能够接受不精确的结果,则可以考虑周期性的进行更新,比如MongoDB本身对集合的文档数、大小信息就是使用周期性更新的策略来维护的,所以每次db.coll.count() 都能很快的返回,但风险就是如果中间出现crash,可能导致count值与实际文档数不一致。

Overflow

Overflow 主要思路是将数据存储到多个bucket里,比如以天为单位组织数据,先把数据存储到当天的bucket(也可以是一个集合),到第二天又创建一个新的bucket存储新的数据,划分bucket的方式可以很灵活。

Sizing your cluster

这个 topic 主要介绍如何做容量评估,主要几个方面

  • Data size 根据需要的集合数量、文档数量、以及文档平均大小来预估总的数据量,来评估需要的磁盘存储空间
  • Working set 根据索引大小、经常需要访问的文档数来预估活跃数据集来评估需要的内存大小
  • Queries IOPS 根据读写访问请求评估需要的IOPS量
  • Shard Collections 根据容量、读写需求评估是否需要进行分片,以及分片的规模

上面的方法只是一个理论上的预估,要精确的了解容量及性能需要,最好是进行实际测试来评估。

2017_06_21_110945

Duriablity over sneakernet

这个 topic 主要介绍WriteConcern、ReadConcern的设计初衷,以及各个level分别解决什么问题,这个官网文档很详细了就不做过多的介绍了。值得一提的是,Speaker 以独特的方式演讲,把问题解释得非常透彻,大写的服。

2017_06_20_163741

Others

  • 其他还听了关于 Index selection、MongoDB perf 理论及实践的topic,内容都非常的好,但太过细节不太好整理,这里就先忽略了,等PPT出来大家可以学习下。
  • 国内还有华为、东航的同学参加了 MongoDB world 17,他们都是MongoDB的客户
  • 今年关于Giant ideas的分享有好几场,印象比较深的是 Matt Parker 关于数学的一场演讲,把很多数学问题搞得很有趣,比如通过excel来模拟照片,通过多米诺骨牌来模拟与非门。

阿里云数据库团队招聘数据库技术专家,欢迎有志之士加盟,一起实现 Giant ideas.

参考

发表评论