一、MongoDB基本概念
MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前NoSQL 数据库产品中最热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB 使用C++开发。MongoDB 的官方网站地址是:http://www.mongodb.org/。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json 的bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。
二、对比
MongoDB |
关系型数据库 |
|
数据存储 |
面向集合 |
面向关系表 |
数据结构 |
模式自由 |
二维表关系模式 |
事务 |
不支持 |
支持 |
大型数据(视频) |
很好 |
一般 |
大数据量查询(千万条以上) |
很好 |
较差 |
数据库维护 |
相对简单 |
相对复杂 |
数据及表关系、结构浏览 |
困难 |
简单 |
数据安全性 |
较差 |
很好 |
分布式 |
很好 |
一般 |
查询 |
非常灵活 |
非常强大 |
主外键关联 |
不支持 |
支持 |
索引 |
支持 |
支持 |
存储过程 |
支持 |
支持 |
三、对比说明
1. 数据存储
MongoDB是面向集合(collection)的,集合中又包含多个文档(document),并支持对象型数据的存储。其中集合和文档的概念,在关系型数据库中类似于表(table)和元组(row:也就是所谓的一行数据)。另外MongoDB是以bson形式存储,而关系型数据库是以二维关系形式存储。
2. 数据结构
MongoDB对数据结构的支持非常灵活,从横向到纵向的支持都很好,比如下面的数据都能存储在同一个集合中:
① {“name”: “wangwu”, “age”: 25}
② {“name”: “lisi”}
③ {“state”: “激活”, “remark”: “无”}
④ {“name”: 6, “age”: “你猜”}
从上面的例子我们能看出,横向方面,支持字段的动态增减(如①和②),从纵向方面,支持字段数据类型混合存储(如①和④)。而在关系型数据库中这种方式的存储是绝对达不到的。
3. 事务
MongoDB本身不支持事务处理,只能通过程序代码来保证。
4. 大型数据
MongoDB不仅支持结构化数据,还支持非结构化数据存储(音频、视频、文档、XML、HTML等),而关系型数据库虽然支持大型数据(如视频)的存储,但是不管从存储效率上还是从获取速度上都不及MongoDB,MongoDB可采用高效的二进制来存储大型数据。
5. 大型数据量查询
MongoDB对于上千万条以上的数据,在查询速度上非常快。而这点却是关系型数据库中的一大痛处。
6. 数据库维护
MongoDB在数据库备份和还原以及数据的导入导出的操作上是非常简单的,通过简单的命令即可完成,还支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移,而关系型数据库在操作上相对复杂一些,上手难一些。
7. 数据安全性
MongoDB在数据安全方面比较差,如果稍有不慎或操作不当,很容易造成数据丢失或数据错误,因此在数据维护和操作上,要非常小心。而关系型数据库在这方面上的担心却要少很多。
8. 分布式
MongoDB非常适合由数十或数百台服务器组成的数据库。支持自动分片以支持云级别的伸缩性。其中自动分片功能支持水平的数据库集群,可动态添加额外的机器。关系型数据库在分布式的支持和操作上都要困难些、发杂些。
9. 查询
MongoDB的查询语句与关系型的sql语句有着很大的不同,或者说是两种风格,二者表现都很不错,MongoDB主要体现在灵活易用上,而sql则体现在功能全面强大上。
10. 主外键关联
MongoDB不支持主外键关联,也没有“约束”的概念。
11. 索引
MongoDB同样支持索引
12. 存储过程
MongoDB同样也支持存储过程
四、选取MongoDB的理由
1. 对于初创型的业务非常适用
MongoDB能更容易应对马良行业务功能点多变的场景,MongoDB采用No schema的方式,免去变更表结构的痛苦,有着很高的灵活性,该特性为开发带来了极大的便捷,也能更容易应对业务上的字段调整。
2.开发更快响应
调整业务时,开发人员理论上只需要调整页面字段结构。
3.强大的大数据处理能力
程序的规模日渐变大,需要储存更多的数据、服务更多的用户以及需求更多的计算能力。
4.使用MongoDB的公司
随着NoSQL生态系统的发展,MongoDB一路高歌猛进。各种企业和初创公司对NoSQL的需求日益增加,对有助于提高效率和无缝扩展的工具的需求也与日俱增,国内各大互联网公司都在使用,如:百度、腾讯、360、美团等。
五、学习成本
1.易上手
MongoDB社区提供丰富的API文档,开发人员可以很快掌握简单的CURD。
2.维护成本低、稳定性高
阿里云提供MongoDB的云服务,很简单的就可以创建一个实例,同时高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。
六、风险点
1.集合滥用
MongoDB的文档数据模型有着很高的灵活性,该特性为开发带来了极大的便捷。但这同样代表着更多的责任一一MongoDB的灵活性会让开发变懒,请绝对不要滥用这种灵活性。专家们建议大家不要在一个集合中存储多个维度或是数据结构变化太多的文档,因为这将会使后期的维护变得异常复杂。将不同类型及结构的文档分散存放在他们自己的集合中是正确的做法。异常的集合,比如该集合中的平均文档体积过大、结构过于复杂、结构不规范等。
2.弱事务
MongoDB是以牺牲安全、事务、结构来换取简单、高效、灵活的,根据 CAP定理 https://zh.wikipedia.org/zh/CAP%E5%AE%9A%E7%90%86,nosql们,只能代码级事务处理(相当于MYSQL中有某张表记录操作日志,再定时检查日志标记,做回滚)
参考:http://blog.csdn.net/liuxinghao/article/details/50178045
http://www.uml.org.cn/sjjm/2014081111.asp