传智-玄痛(传智播客北京校区C/C++学院技术指导老师)
MongoDB的起源
几年前 10gen 公司做了 SaaS 方面的研发,因为公司一个 MongoDB 产品存储接口的易用性,用户评价非常好,公司开始全力开发 MongoDB。也因此10gen 公司改名为 MongoDB。
MongoDB的应用
MongoDB 适用于网站数据、游戏数据、缓存、高伸缩性等场景。目前,百度、阿里、快的打车、京东、赶集网、360、CERN等众多公司纷纷部署MongoDB。
MongoDB的特点
在 Web2.0 时代,传统 RDBMS 在高性能、高可用性、高可拓展性的要求下开始力不从心。
作为NOSQL一种解决方案,由C++语言编写的开源的文档型数据库系统MongoDB堪称NOSQL 运 动 中 的 明 星 成 员。MongoDB 被 db-engines 网站 (http://db-engines.com/en/ranking_trend) 评为 2014 年年度最受欢迎的数据库管理系统。总结一下 MongoDB 的主要特点:面向文档、模式自由、高可用性、水平拓展、支持丰富。
面向文档
文档就是存储在 MongoDB 中的一条记录 , 是一个由键值对组成的数据结构。如 {"company":"itcast","address":"Beijing"}。作为面向文档(Document-Oriented) 的 数 据 库,document 之 于 collection,record 之于 table。
模式自由
文档是 MongoDB 中数据的基本单元,集合则可以被看作是没有模式的表。模式自由(schema-free),每一个 Document都包含了元数据信息,每个文档之间不强迫要求使用相同的格式,同时他们也支持各种索引。由于没有模式需要更改,通常不需要迁移大量数据。比如一个student 文档:{"name":"C++lover","like": {"Linux 系统编程 "," 分布式系统 ","MongoDB"}}
高可用性
高可用性 (High Availability,HA) 是尽量缩短因维护和崩溃所导致的停机时间,以提高系统和应用的可用性。MongoDB 支持在复制集 (Replica Set) 通过异步复制达到故障转移,自动恢复,集群中主服务器崩溃停止服务和丢失数据,备份服务器通过选举获得大多数投票成为主节点,以此来实现高可用。该模式下为实现读写分离而在备份节点上进行读操作,由于备份服务器实时同步主服务器 Oplog 写操作,虽然适当的一些读也是可分担部分主节点的任务,但是有增加从节点的延时风险。最新的 MongoDB3.0 提供了 MVCC 机制,实现了文档级别的并发控制,进一步提高了并发性能。
水平拓展
MongoDB不推荐使用从节点实现读性能拓展,而是使用分片 Shard。MongoDB 支持分片技术,它能够支持并行处理和水平扩展。通过自动分片技术,Shard 能够在多个片之间分发数据,可以让MongoDB 的部署解决单个服务器的硬件限制而不需要增加应用程序的复杂性,解决包括 RAM 和磁盘I/O 的限制,一个片通常也是一个复制集。
支持丰富
MongoDB除了提供以上丰富的功能支持,另外还提供了丰富的BSON数据类型,官方 MongoDB 的 官 方 driver 支 持 (C/C++、C#、Java、Node.js、Perl、PHP、Python、Ruby、Scala), 另外社区支持了 MongoDB 的 Go,Erlang的驱动。
此外 MongoDB 内置 MapReduce 引擎等聚合框架,空间地理数据的索引,GridFS 等适合多种业务需求。
MongoDB的未来和思考
大数据时代下的开发势必要求程序能够处理海量的数据,MongoDB凭借自身的特点以及与Hadoop 的结合,无疑奠定了其在云计算和大数据中的重要地位,市场前景明朗,需求自然旺盛。在各大招聘网站上,C/C++ 服务器工程师大多都有“熟悉NOSQL(MongoDB、Redis 等)优先”等要求。传智播客以就业为导向,已将 MongoDB 前沿技术融
入到传智播客的 C/C++ 学科就业方向的课程中,以提高整体课程的实用性。
最后我希望用两句话引发大家对 MongDB 的思考 :FREE NOT FREE;做最擅长的事。