十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

萌乃伊始,阔为坦途——后起而不怯,兼而力求在业界创造更多可能,这或许就是MongoDB(萌阔)想要对外传达的理念。

2017年9月9日,2017 MongoDB中国用户大会在上海龙之梦万丽酒店圆满收官。十载转瞬,MongoDB几经迭代,填过坑改过道,一步步踏上非关系型数据库首席。其间种种,一言难弊,下面本次大会的议程随行录,将带你速览MongoDB的前世今生,来年他日。

【MongoDB 中国 2017随行笔记】

活动介绍:本年度大会规模空前,阵容强大。除了CEO Dev Ittycheria再次亲临现场发表主旨演讲外,巴克莱银行、大和资本市场、太平洋保险、安盛集团等国际知名企业重量级人物亦受邀在列。此外,除了来自MongoDB大中华区的技术专家之外,更有来自纽约总部的数据分析师Ziang Gao、来自伦敦的首席产品经理Andrew Morgan,以及来自于澳大利亚的高级工程师Linda Qin将空降现场,与广大mongoer共话MongoDB。

MongoDB的那些年

“MongoDB十年磨一剑,在开发为开发。”——MongoDB大中华区副总裁苏玉龙 《MongoDB 中国 2017开幕词》

MongoDB自2007年成立起,至今已是十年光景。科技圈的发展也从CT(communication technology)时代到IT(information technology)时代直至步入DT(data technology)时代,新时代下的MongoDB已颇为茁壮成熟,过往几年,在全球化的浪潮中亦可窥见MongoDB的蓬勃发展。而MongoDB中国则在一年多前才正式成立,初建团队至今,目标直指如何建立MongoDB在中国的生态系统,坚持“在开发,为开发”,因为我们相信“没有用户的软件=垃圾软件”。

众所周知,数据库带来核心技术,然而数据库所能带来的却又远非“核心技术”四个字足以概括,更包含了其对于整个业务而言无与伦比的价值——数据库促使业务转型,并支撑新时代需求。今天的MongoDB生态系统中,实则囊括了全球资源,同时拥有本地化的中文网页+讯息资料,同步企业内同仁的分享,同时实现全球化。这一系列发展带来的不仅是用户数量的增加,更是可以从市场上各类应用开发的现状中觅得踪迹——从IO简单存储或缓存层技术,到IOT,再到众多Fintech应用、内容管理等;从几个单应用的App走向平台化的开发走向。

本次大会开幕词中还提到了MongoDB中国下一步的发展路线——让整个开发方式走向云化。

“2007年,是科技圈发展嬗变所等待的一个转折点;2007有三宝——iPhone、Kindle、MongoDB。”——MongoDB总裁兼CEO Dev Ittycheria

1995年至2001年间,由科技及新兴互联网相关企业投机事件导致的互联网泡沫危机爆发,蔓延欧美及亚洲多个国家的股票市场。2000年,美国网络科技泡沫破裂,网络股暴跌,一时间内部科技从业者大规模失业爆发,市场震荡,很多人开始意识到,需要开拓一条便捷、成本低的全球合作之路。一朝蛰伏,等待时机。终于,业界在2007年迎来了这个注定不凡的“Timing”。站在今天的大环境下回首视之,不难发现2007年足以称得上科技圈“里程碑式的一年”——这一年,我们迎来了首款iPhone的发布、初代Kindle的推出,以及MongoDB的萌芽。

技术解析+案例分析+适用场景解读「三管齐下」

MongoDB性能优化
(MongoDB高级技术支持工程师Linda Qin)

性能优化常见问题

  • 系统/MongoDB配置

    • 设置多大的WiredTiger缓存
工作集vs内存 推荐 注意事项
未压缩的工作集<=内存 把WiredTiger的缓存设大一些 最高不超过内存的60%
未压缩的工作集>内存,但压缩的工作集<=内存 把WiredTiger的缓存设小一些 压缩、解压会增加额外的CPU负载
压缩的工作集>>内存 区别不大 如果大家正在对硬件进行规划,尽量考虑分配足够的内存,这样内存容量可以容纳未压缩的工作集,以保证一个最高的数据读写效率。

索引、诊断

  • 创建索引的技巧

    • 顺序
      • 精确匹配的域
      • 排序的域
      • 范围匹配的域
    • 覆盖查询(Covered Queries)
    • 部分索引(Partial Index)

参考文档推荐的配置:

性能优化案例:分片优化

  • 优化案例1

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

分析:查询操作都没有包含分片片键,mongos需要把这些操作分发到所有的分片。

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

优化:如果某个查询运行时已知分片的片键值,把片键值都加入到查询操作中。

  • 优化案例2

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

性能优化案例:应用优化

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

  • 记录总数

db.collection.find({fieldA:"",…,fieldX:""}).
count()

  • 查询结果

db.collection.find({fieldA:"",…,fieldX:""}).
sort({fieldY:1}).limit(200)

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

  • 记录总数

db.collection.find({fieldA:"",…,field
X:""}).limit(201).count(true)
db.collection.aggregation([
{$match:fieldA:"",…,fieldX:""}},
{$limit:201},
{$count:"total"}
])

  • 查询结果

db.collection.find({fieldA:"",…,field
X:""}).sort({fieldY:1}).limit(200)

总结

  • 按照推荐配置来设置系统/MongoDB
  • 创建合适的索引
  • 分片
    • 为集合选择合适的片键
    • 在相关操作加入片键值
    • 需要时可以对分片进行分区管理
    • 需要时可以对mongos的连接池进行优化
  • 对应用进行优化

MongoDB适用场景

正是因为“新”这个特点,致使MongoDB在一片全新的土地上生长起来的过程中,不免接收到一些疑议或是初学者的困惑,例如“这个场景有使用MongoDB的必要吗?XX数据库不是也能够解决吗?”等等诸如此类。诚然,技术圈子里从来没有所谓的“非其不可”,但在某些场景下,MongoDB却能够协助用户降低问题的解决成本,而这就直接关乎MongoDB的自身特性。

作为NoSQL数据库首席,首先不得不谈谈其与关系型数据库的差异。前者以动态数据模式和横向扩展能力为主打,后者则以ACID事务性著称。其中,MongoDB的分片技术,借助于数据相对独立、容易分布的JSON文档模型,在处理海量数据能力上具有更可靠的的水平扩展能力和易管理性。

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

如今的MongoDB应用已逐步渗透至各大领域,涵盖物联网(IOT)、游戏、物流、电商、内容管理、社交、视频直播等。而在本次用户大会中,Mongoing中文社区发起人唐建法(TJ)也进行了主题为“当MongoDB遇见IOT——基于MEAN STACK的开发”的内容分享,下文也将对所涉内容做一个简要整理。物联网是一个博大的概念,故而TJ的分享主张从小点着手,侧重讲解用以实现快速开发的工具——Mean Stack

近年来物联网热度颇高,算是一大研究热点,但实际上,物联网本身很难定义,因而不若简而视之——其实就是互联网的延伸,相当于互联网4.0版本。

互联网发展史

  • 80年代在美国院校多以学业课题研究的形象出现;
  • 90年代随着微软的Dr-DOS系统、个人机器的普及,互联网正式推广开来;
  • 21世纪初,随着iPhone、Android这些智能手机的普及,互联网得到了长足的发展,而移动互联网正是一大最为火爆的爆发点;
  • 2010年以后,最火的技术当属物联网。所谓物联网,就是我们此前先是基于PC、基于我们的浏览器上网,而后基于手机,直到现在是基于所有的事物,即IOT——Internet of Things——所有事物都上网,这在我们的生活中实际上是非常常见的,其中就包括现在很火的智能家居。

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

另附物联网后台架构图如下:

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

物联网发展过程中的挑战

依旧以智能家居为例:从一个控件开始逐步扩大,可以想象模型会不断变化,是否能够对这个设备,对整个任务管理层有一个比较好的把控?最好的模型又要如何搭建?这都是需要纳入考虑的问题。此外,互联网数据一大特征就是量大,尤其在中国这个大背景下,更是真正做大数据的地方。面对巨量数据,Oracle花费太高;选择SQL Server显然不现实;而MySQL在业界虽不乏案例但其本身不支持扩展性……更有众多技术框架等着开发者去选择。上述挑战总结下来,大致有以下三点:

  • 如何对设备数据建模
  • 如何处理海量数据
  • 如何面对一箩筐的技术框架

MongoDB的优势

至于MongoDB,设备隐私问题可交由JSON Model来解决;实时分析亦有聚合框架……引入MongoDB之后再来看物联网后台架构:

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

  • JSON文档模型 – 影子设备、数据描述
  • 分片集群 – 随着业务发展而无缝扩展
    • 按需自动扩展
    • 数据自动分布到多节点
    • 路由节点隐藏集群架构
    • 支持基于哈希、范围及自定义 标签的分片
  • NOTIFICATION API
    • 3.6 新功能
    • 基于MonogDB Oplog
    • 监听所有数据库写入操作
    • 同时支持1000个客户端
    • 应用场景:
      • Pub/Sub
      • Messaging Queue
  • MEAN STACK
    不同于早期的LAMP架构等,MEAN(MongoDB/Mongoose.js、Express.js、Angular.js和Node.js)是一个现代化新型的技术框架,由此成就了颇多全栈工程师

总结

IOT的挑战——MongoDB的价值。

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

上述优势成功助力开发者快速开发包括物联网应用在内的众多现代应用。

如下图坐标所示,从北美到欧洲到中国,颇多企业在大规模运用MongoDB来存储互联网数据,从车联网到智慧城市,这些案例都在结合MongoDB之后得到了完美解决。

十年磨一剑,在开发,为开发:MongoDB 2017中国用户组大会随行二三记

总结

数据库作为最关键的基础设施,渗透技术领域的方方面面。随着互联网时代的信息高速膨胀,传统关系型数据库因其高门槛、高成本以及扩展性差等原因导致的局限性逐渐浮出水面,如今更是面临诸多问题和挑战,在这一大环境下,NoSQL的进一步发展已成必由之势。面对现状,有的企业选择在关系型数据库领域寻求突破,大胆尝试以创造机遇。也有用户选择了数据库迁移这一策略,然这一过程也将面临颇多难题。在这个背景下,诸如MongoDB这样的茁壮成长中的年轻数据库,无疑在为整个行业的发展注入新鲜活力,与各个技术领域挂钩,凭借自身优势,为开发者提供新的思路以及翁提解决模式,我们有理由期待其未来进一步的发展。

正应了那一句——在开发,未开发。技术,无边界。

相关资源