没有⼀个技术天⽣完美,MongoDB⼗年发展全纪录
2007年,MongoDB公司的前⾝10gen正式成⽴,2009年2⽉开源数据库MongoDB 1.0正式⾯世,以开源的⽅式进⼊市场接受考验。时⾄今⽇,MongoDB已经从⼀个在数据库领域籍籍⽆名的“⼩透明”,变成了话题度和热度都很⾼的“流量”数据库。
2009年2⽉,MongoDB数据库⾸次在数据库领域亮相,打破了关系型数据库⼀统天下的局⾯;云数据库服务
2014年12⽉, MongoDB 收购了WiredTiger 存储引擎,⼤幅提升了MongoDB的写⼊性能;
2016年, MongoDB推出Atlas,在AWS、 Azure 和GCP上的MongoDB托管服务;
2018年6⽉, MongoDB推出ACID事务⽀持,成为第⼀个⽀持强事务的NoSQL数据库;
2018年11⽉,MongoDB将其开源授权修改为SSPL;
10年间,MongoDB的每⼀次创新⼏乎都引起了业界的讨论。当然除了好消息,MongoDB也有⼀些其它的声⾳传出,例如2017年⼴为⼈知的“MongoDB赎⾦”事件,因默认不需要⽤户名密码登录的设置,屡次发⽣的企业数据泄露事件。
MongoDB到底是个什么样的数据库呢?作为数据库,其到底经历了怎样的发展历程,拥有哪些核⼼竞争⼒?展望未来,MongoDB⼜将⾛向何⽅?…为了让⼤家更加清晰全⾯的了解MongoDB,我们特意邀请MongoDB 中⽂社区发起⼈、MongoDB官⽅⼤中华区⾸席架构师唐建法撰写了本⽂。
众所周知,数据库是所有软件中除了操作系统之外最复杂的软件。按照 , ⼀个专门跟踪数据库流⾏程度并每⽉发布数据库排名的⼀个⽹站的统计,排名前5的数据库分别为Oracle, MySQL, SQLServer, PostgreSQL 和 MongoDB。
从⼀个名不经传的科技创业公司,到今天可以说是家喻户晓的知名数据库⼚商;从⼀个籍籍⽆名的⼩透明数据库,到现在成长为各⼤公司争相采⽤的数据库产品,MongoDB到底经历了怎样的发展历程?
MongoDB 编年史
技术发展重要节点及事件
⽂档数据库⿐祖的诞⽣
2007年, 10gen 创始⼈Eliot和Dwight在寻⼀个能够⽀持他们的云计算平台的海量数据库。不奇怪,当时成熟的数据库基本上都是基于单机架构的传统关系型数据库如Oracle, MS SQLServer等。即便Oracle⽀持⼀些集部署,其扩展性也仅限于2到4台服务器的范围。在没有很好的解决⽅案的情况下,10gen的创始⼈决定⾃⼰研发⼀个数据存储服务,能够把开发者使⽤的程序对象数据存到⼀个类似于数据库的地⽅,并提供⾮常易⽤的API让开发者可以对数据进⾏常见的增删改查操作。为了最⼤程度⽅便开发者,Eliot决定使⽤JSON作为数据格式来存储。JSON的数据在英⽂中被称之为JSON Document,这也是⽂档数据库名字的由来。 事实上证明这个基于JSON的选择,成就了⼀家伟⼤的新型数据库公司。
MongoDB⾃动分⽚
2010年8⽉, 10gen发布了MongoDB 1.6,第四个⼤版本。这个版本最⼤的⼀个功能就是Sharding,⾃动分⽚。在关系型数据库中,当数据量达到⼀定程度,单个节点服务器资源充分饱和⽆法保证及时的服务响应时间时,通常会采⽤分区分表的数据库优化⽅案。但是这些⽅案都是侵⼊式的,很多时候意味着应⽤程序需要做较⼤的改动,来配合数据库端的改动。⽽MongoDB的⾃动分⽚,可以在⼀个集的⼏个分⽚服务器内⾃动进⾏数据的分布和均衡。在尽可能把数据均匀的分布到多个存储节点的同时,为应⽤开发者提供⽆缝的体验。开发者⽆须关⼼数据的具体位置,程序也不需要因为分⽚与否⽽进⾏修改。采⽤分⽚技术,开发者可以很容易使⽤数⼗甚⾄数百个节点。早期的⽤户如百度就是基于这种分⽚技术,为3亿多⽤户、3000亿条数据量的百度云盘⽂件元数据管理提供有效的集解决⽅案。
MongoDB ⽀持存储引擎API并引⼊WiredTiger 存储引擎
2014年12⽉,MongoDB收购了Keith Bostic和Michael Cahil的 WiredTiger存储引擎团队,并将其集成到3.0版本中,成为⼀个新的存储引擎。
在此之前,MongoDB在存储层使⽤的是操作系统⾃带的MMAP API进⾏数据落盘持久化⼯作。从功能实现⾓度,使⽤MMAP使得早期团队可以集中注意⼒在MongoDB的API、查询、索引计划、数据同步等上层逻辑。但是随着MongoDB使⽤场景的增多以及数据量的增
加,MMAP在⼤量写⼊场景下的性能瓶颈⽇益凸显,同时也成为了早期很多性能槽点的根源之⼀。
WiredTiger的引⼊是MongoDB ⾛向⼀个成熟数据库的最重要的⾥程碑。在性能上,WiredTiger较之⽼版本的MongoDB提升了7-10倍,有效地解决了之前MMAP在⼤量写⼊下的性能瓶颈。
值得⼀提的是,Bostic和Cahil在之前曾把他们的前⼀代产品BerkerlyDB卖给了Oracle。Oracle随后推出以BerkerlyDB为核⼼的Oracle NoSQL数据库。Oracle NoSQL基本上是⼀个未被⼈听说过的产品。从这⼀点上似乎证明了,对⼴⼤开发者来说,⾸先要有⼀个易⽤的数据库,然后才是⼀个⾼性能的数据库。
MongoDB ⽀持Join
2015年12⽉,在发布的3.2版本中,在MongoDB的聚合框架(Aggregation)中增加了⼀个不起眼的操作符: $lookup。 这个看上去虽⼩,但是意义巨⼤的功能意味着第⼀次作为⼀个NoSQL数据库,MongoDB终于开始⽀持了关系型数据库的核⼼功能:关联。从3.2开始,你可以⼀次同时查询多个MongoDB的集合(表),不⽤像以前那样,如果有多表查询需要在代码中发起多个数据库查询,然后在内存中进⾏⼿⼯关联。
MongoDB 成功上市纳斯达克
2017年10⽉,MongoDB成功在纳斯达克敲钟,成为26年来第⼀家以数据库产品为主要业务的上市公司。⼀年多后再看,MongoDB的股价蹭蹭蹭的升了4倍多。如果我们和Cloudera / Hortonworks ⽐较,两家以Hadoop产品为主要业务的⼤数据科技公司,两家现在加起来的市值,尚不如⼀个MongoDB。这是为什么?
最⼤的原因就是基于Hadoop产品的⽬标场景是⼤数据分析,⾸先⽤⼤量低成本存储聚集所有企业内外部数据,然后⽤MapReduce技术来对客户进⾏画像,贴标,或者制作⼀些统计报表。虽然这些场景确有价值,较之于MongoDB驱动的操作型场景,如新型⼿机应⽤,游戏,物联⽹,数字化银⾏等,⽆疑 MongoDB ⽀撑的是直接⾯向客户的,更加有业务价值的应⽤。
MongoDB赎⾦事件
随着MongoDB的⽤户数量持续快速增长,⽇渐成为企业的标准数据库,MongoDB的负⾯事件也不断。2017年⽹络上流传最多的就是所谓的赎⾦事件。⿊客们侵⼊⽤户的MongoDB数据库,把数据全部删掉,然后留下⼀条消息,要求⽤户⽤⽐特币⽀付价值⼏千美元的赎⾦,才将数据库数据恢复。
MongoDB ⽀持ACID多⾏多表强事务
2018年6⽉,MongoDB推出4.0版本。和3年前有点类似,本来要发布2.8版本的,结果因为引⼊WiredTiger存储引擎,版本改成了3.0。按原计划本该发布3.8的,但是由于引⼊了千呼万唤始出来的多⽂档ACID强事务机制,MongoDB决定版本改为4.0.
ACID事务机制已经是关系型数据库如Oracle, SQLServer,PostgreSQL的标配。之前MongoDB对事务的⽀持仅限于单⽂档内。如果你在开发⼀个电商应⽤,在⼀笔交易内要完成插⼊订单,扣库存,推
送到消息队列等操作,原先的MongoDB版本⽆法保证这⼏个步骤的原⼦性,也没有出错情况下的回滚机制。 因为这个功能的缺失,很多开发者或架构师会在交易性的业务中有意避开MongoDB。⽽随着4.0的发布,MongoDB 终于可以挺起胸昂起背,向世界宣布MongoDB正式成为第⼀阶层操作型数据库,可以⽤来⽀撑⼏乎所有的业务场景。
SSPL 开源协议

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。