MongoDB World 2017 参会全记录

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本文主要给大家分享上周(6.19-6.21)在芝加哥参加 MongoDB Wolrd 2017 的一些收获,MongoDB World 是 每年 MongoDB 数据库的盛会,来自全球的 MongoDB 技术爱好者聚集在一起讨论 MongoDB 产品及技术的发展情况。

作者简介

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

MongoDB云数据库包年5折,包月6折活动火热进行中,猛击了解详情

基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。

会议安排

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.

参考

2017_06_20_203942

相关文章
|
NoSQL 安全 数据安全/隐私保护
MongoDB中使用的SCRAM-SHA1认证机制
介绍 SCRAM是密码学中的一种认证机制,全称Salted Challenge Response Authentication Mechanism。 SCRAM适用于使用基于『用户名:密码』这种简单认证模型的连接协议。 SCRAM是一个抽象的机制,在其设计中需要用到一个哈希函数,这个哈希函数是
20915 0
|
NoSQL 关系型数据库 数据库
天生一对,当游戏遇上MongoDB
当游戏遇上MongoDB,会碰撞出什么样的火花,本文为您一一道来。MongoDB针对游戏灵活多变需求、一些专有场景-道具自动过期和附近玩家、高可用、高可扩展、回档、滚服、运营数据分析等场景都有非常好的解决方案,可谓是天生一对。
11176 0
|
4月前
|
监控 Java 测试技术
2025 年 Java 核心技术从入门到精通实战指南
《2025年Java核心技术实战指南》全面覆盖Java开发的最新趋势与最佳实践。内容包括Java新特性(如模式匹配、文本块、记录类)、微服务架构(Spring Boot 3.0+、Spring Cloud)、响应式编程(Reactor、WebFlux)、容器化与云原生(Docker、Kubernetes)、数据访问技术(JPA、R2DBC)、函数式编程、单元测试与集成测试(JUnit 5、Mockito)、性能优化与监控等。通过实战案例,帮助开发者掌握构建高性能、高可用系统的技能。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
235 7
|
SQL 人工智能 关系型数据库
SQL玩转多模态AI,轻松搞定图片+文本混合搜索
本文介绍了一种通过原生SQL实现多模态智能检索的破局思路,基于PolarDB创新融合AI智能引擎,解决传统AI检索系统数据迁移冗余和工具链割裂的问题。方案优势包括低门槛AI集成、灵活适配多场景、全链路数据安全及按需付费免运维。文章详细描述了部署资源、应用配置及方案验证步骤,并提供清理资源指南以避免额外费用。适合希望快速构建智能搜索应用的开发者参考实践。
|
7月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
269 23
|
NoSQL Redis Windows
windows版redis报错:本地计算机上的Redis服务启动后停止
1问题 2 原因 3解决 3.1 如果需要临时启动Redis 3.2 如果需要将Redis注册为服务 4其他说明 1、问题 使用命令redis-server.exe  --service-install redis.windows.conf命令将redis注册为服务,启动服务时报错: 本地计算机上的Redis服务启动后停止。
2350 0
|
开发者
新产品开发流程 | 学习笔记
快速学习新产品开发流程。
997 0
新产品开发流程 | 学习笔记
|
NoSQL Linux Redis
Redis中的事件驱动框架(一)
Redis中的事件驱动框架
458 0
|
监控 人机交互 芯片
西门子S7-200 SMART的功能和特点有哪些?STEP7-Micro/WIN SMART编程软件简介
西门子S7-200 SMART是西门子公司针对中国小型自动化市场客户需求设计研发的一款高性价比小型PLC产品。S7-200 SMART CPU将微处理器、集成电源、输入输出电路组合到一个设计紧凑的外壳中,已形成功能强大的小型plc。面板包含电源接线端子、直流24V电源输出端子、数字量输入输出接线端子、CPU状态指示灯、IO状态指示灯、存储卡插槽、以太网接口、RS485接口等。
西门子S7-200 SMART的功能和特点有哪些?STEP7-Micro/WIN SMART编程软件简介