根据DB-Engines的排名统计,MongoDB综合排名第四(2016年1月数据,前三名分别是Oracle,MySQL,SQL Server),NoSQL领域(非RDBMS)里排名第一。尤其是在2015年里,一口气发布了两个大版本,3月发布了3.0版本,11月发布3.2版本。
在3.2版本中开始突破NoSQL的枷锁,提供了Join操作,可见其并不满足于NoSQL“独角兽”的称呼,目标早已定位成NewSQL,向RDBMS发起挑战。
但MongoDB毕竟不是RDBMS,甚至在数据建模上有很多相反的原则,比如MongoDB更提倡反范式化。而人的惯性思维作用,是更原因相信“传统”,比如MongoDB:逐渐变得无关紧要这篇文章,作者并不习惯于使用MongoDB的文档模型,并不肯定文档模型带来的开发效率的提升,而更依赖传统数据库结构带来的沉淀,我怀疑作者对MongoDB的数据建模上还是采用着范式化结构,所以才如此依赖多文档事务,并且对MongoDB带来强烈的不满。也没有关注到最新的MongoDB已经开始采用WiredTiger存储引擎,正式步入高性能数据库行列。
还有那篇著名的讨论“Don’t use MongoDB”,这篇文章发表于11年,原文很多内容并不属实(作者承认那篇文章只是个玩笑),而且10gen(MongoDB公司之前的名称是10gen) CTO对此还进行了回复,可是直到今天,很多人还是只知前者,甚至深信不疑,在社区中反复抛出同样的观点,比如:“MongoDB会丢数据”。
造成各种个样的误解,最大的原因还是“不了解”或者说MongoDB大过于神秘,不像MySQL,Oracle已经有大量的文章,大量的解惑教程,MySQL甚至还有各种的源码分析。MongoDB社区生态上还非常年轻,相关的技术文章或者书籍还不丰富,回顾我自己学习MongoDB的过程,一方面来自官方文档,另一方面来自各种博客书籍。但内容上大部分只是叫你HOW,而不是WHY,不能知其所以然。随着云服务的起步,运维模式的变化,出现了越来越多的DEV+DBA角色,仅仅会用API,也早已跟不上时代,更多的还要做到会管。比如什么时候要建立索引?查询语句是怎么执行的?哪里会有潜在的问题?这些都是作为数据操作者应该掌握的知识。但并不是每个人都有时间从源码上一点点学习。
就在前几天,阿里云作为中国第一的云计算公司,正式开始提供MongoDB SAAS服务。作为MongoDB生态圈中的一员,有义务做出一个更深入的教程,MongoDB用户可以通过文章提升自身的操作管理水平,开源爱好者也可以将该列文章作为源码阅读的辅助。
系列第一部分重点在“用”好MongoDB,第二部分重点是“管”好MongoDB,第三部分是案例的收集。