MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富、最像关系数据库的NoSQL数据库;它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,可以实现类似关系数据里单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB不是在实验室里面凭空想象出来的产品,它是10gen公司的工程师根据实际的需求而设计的,主要基于以下几点考虑,需要一种新的数据库技术来满足数据存储层的水平扩展,而且要容易开发,能够存储海量的数据;一种非关系的结构是使数据库能支持水平扩展的最好方案;文档数据模型(BSON)容易编码和管理,将内部相关的数据放在一起能够提高数据库的操作性能。
MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认监听端口为27017。MongoDB的内存管理依赖于操作系统的自动内存管理机制,而且通过Map对数据文件进行内存映射,因此推荐MongoDB运行在64位平台上,否则在32位模式受虚拟内存地址大小的限制,而且运行时支持的最大文件尺寸也只能为2GB。当然对于测试和开发环境我们可以在32位模式下进行,生产环境上最好是部署在64位上。
MongoDB发展迅速,无疑是当前NoSQL领域的人气王,就算与传统的关系数据库比较也不甘落后,数据库知识网站DB-Engines根据搜索结果对223个数据库系统进行流行度排名,2014年7月的数据库流行度排行榜前12名如图1-1所示。
我们可以看到前三甲依然是Oracle、MySQL和微软的SQL Server,值得关注的是,第五名MongoDB与第四名PostgreSQL之间的积分差距已不足1分。前四名由于历史原因都是关系数据库,许多大型的垄断行业仍然在使用这些关系数据库。
MongoDB只通过6年时间就将公司市值发展到12亿美元,其成果相当于著名开源公司Red Hat 20年的发展。MongoDB的成功之路,一大部分归功于Web开发者。作为一个面向文档数据库,在许多场景下它都优于RDBMS,同时还可以获得非常高的读写性能。此外,动态、灵活的模式更可以让用户在商用服务器上轻松地进行横向扩展。