MongoDB于2009年发布,其最初的设计目标是性能和易于存取数据。作为文档数据库,允许数据以嵌套的状态保存,并且能够以任意方式查询嵌套的数据。这使得它能够灵活地处理各类大小任务,正因为多功能、强大、灵活,因而广泛被使用。阿里巴巴由于业务发展的需要,对于互联网场景下的各类数据库技术都有比较深入的研究,目前也致力于打造MongoDB云服务。 在本次“遇见未来”系列专访栏目中,我们有幸邀请到了阿里云高级技术专家张友东,分享阿里在使用MongoDB的一些感悟和新的尝试。 张友东 大家好,我是阿里云的高级技术专家张友东(林青,阿里花名),主要关注分布式存储与数据库技术领域,目前从事阿里云数据库的开发工作,致力于让开发者使用上最好的云数据库服务。 MongoDB技术的发展历程,以及文档数据库的兴起与发展MongoDB 发展至今刚过10年,2017年成功上市也说明了市场对 MongoDB 的认可,10年前是移动互联网爆发的关键节点,iphone 的诞生催生了大量移动应用的诞生,大数据场景不再是大公司的专利。在移动互联网高速发展的同时,各种各样的业务场景,快速版本更替的需求,对数据库基础设施提出了更高的要求,导致在很多场景下,结构严谨的关系数据模型并不是最佳选择,而且关系型数据库在扩展性上也无法适应快速发展的业务需求。在这个背景下,MongoDB 等 NoSQL 数据库应运而生,在 MongoDB 文档模型下,数据没有固定 schema,访问、修改起来非常灵活,特别适合于需要快速开发迭代的互联网应用场景,目前 MongoDB 在电商、游戏、物联网等场景都着有广泛的应用。 在 MongoDB 云数据库方面,目前团队的核心的目标是打造最好(用户体验最好、性能最好、成本最低)的 MongoDB 云服务。
MongoDB数据库有哪些主要的特点和优势?总的来说,MongoDB 的很多功能特点都是为了让开发者能更加简单、方便、低成本的进行业务开发迭代,让 DBA 运维管理起来更加简单。
MongoDB在过去的版本演进中,比较重大的变化包括哪些呢?目前在3.4版本上,您最关注的核心特性有哪些,可以简单介绍下吗?从接触 MongoDB 到现在,我经历了从 MongoDB 3.0 到 MongoDB 3.6 四个大版本的发布,也看到 MongoDB 内核不断的提升。
上面简单列举了每个大版本我觉得最重要的提升,实际上每个大版本的提升都远不止于此,详细的改进项官方都有详细的 ReleaseNote 文档,有兴趣的同学可以进一步了解。 MongoDB 主要支持的存储引擎有 WiredTiger 和 mmapv1,WiredTiger 从3.2版本开始就是默认的存储引擎,在多核场景下做了很多优化,基本能覆盖绝大部分应用场景;mmapv1 目前仅在大量集合及索引的场景还有用武之地,针对这个场景,WiredTiger 开发团队也在做改进,在3.8+的版本里会彻底废弃 mmapv1引擎。 除了官方自带的 WiredTiger 和 mmapv1 引擎外,开源社区还支持 MongoRocks 存储引擎,这个引擎基于 RocksDB 实现,基于 LSM-tree 的存储结构,在高并发写入场景相比 WiredTiger 更有优势。为了更好的服务用户的业务,我们在 MongoDB 云数据库上也支持了 MongoRocks 引擎。 MongoDB的强伸缩性在企业环境中有哪些优势,及其具体的应用场景?MongoDB 灵活的文档模型,在需求多变的应用场景下适应性极强,以游戏为例,基于传统关系模型,构建一款游戏,可能需要抽象很多张表,比如用户表、角色表、装备表等,然后在查询时基于多张表做关联,在遇到运营需求变更时,则需要进行表的 schema 变更,这通常是一个很重的线上操作,有可能需要停服来做变更。而基于 MongoDB,分散的信息可以组合到一个文档里存储,降低了数据查询成本,同时由于文档结构能方便的进行在线修改,能很好的适应游戏运营策略的调整。 另外,MongoDB 提供了复制集、分片集群2种部署模式,使得用户可以渐进式的扩展。在业务发展初期,业务量较小,最大的诉求是提供持续稳定的数据服务,这时用户只需要部署复制集即可,运维管理成本很低;随着业务不断的发展,当单个复制集不能再垂直扩展(存储能力或写入能力达到单机瓶颈),可以通过部署分片集群来进一步扩展。 相较于RDBMS,MongoDB真的能带来巨大的性能提升吗?主要是通过哪些技术实现的?在性能提升的同时,有没有带来一些问题性能上的提升要看结合具体的场景,并不是所有业务切换到 MongoDB 上都会有性能提升,根据我个人的理解,MongoDB 的性能提升主要体现在以下几个方面。
MongoDB未来的演进方向是什么样的呢?从 MongoDB 的 RoadMap 看,在未来几年还是在往 NewSQL 路线上继续前行,即兼有关系型数据库的强大功能和 NoSQL 数据库的易扩展性。
除了MongoDB,您还比较关注哪一个数据库呢?可否简单聊一下对任意一款NoSQL/NewSQL数据库的认识和看法?请问您如何看待数据库的未来,会朝着什么样的方向发展?除了 MongoDB,社区比较流行的数据库,比如 MySQL、Redis等也都有关注,还有近几年涌现的分布式数据库 Google Spanner、TiDB,以及基于计算存储分离思想的 AWS Aurora,阿里云的 PolarDB等。 关于未来数据库的发展,简单的谈下个人的看法
对于想学习MongoDB的技术爱好者,您有什么建议给他们吗?对于想学习 MongoDB 技术的同学,强烈推荐的学习资料就是 MongoDB 官方文档,涵盖接口使用,数据库配置、内部实现、用户案例等各种内容的介绍,非常全面,社区里平时问的比较多的问题,99% 都能从官方文档上找到答案。 另外,正在学习或使用 MongoDB 的同学,也可以加入到 Mongoing 中文社区,社区的官网(mongoing.com)会有 MongoDB 技术相关的文章,以及官方技术文档的中文翻译,社区还会定期的在各大城市组织线下的技术交流活动,为 MongoDB 技术爱好者提供一个交流与学习的平台。 跨界与融合、机遇与挑战、个人与企业、现在与未来。让各行业、企业,以及每一个向未来而努力的人,听见时代最前沿的声音,见证成长! |
|