MongoDB和关系型数据库对比
MongoDB和关系型数据库对比
加油,新时代打工人!
MongoDB和关系型数据库对比
1、MongoDB是什么
MongoDB并非芒果的意思,而是源于 Humongous(巨大)一词。 那么为什么要学习MongoDB呢? MongoDB最大的优势就是开发效率的显著提升和卓越的横向扩展能力;做了同样的功能的业务代码,代码量显著减少,因为MongoDB直接使用了类似对象模型的JSON数据结构来进行数据存储,从而大幅度简化了数据库的模式设计及ORM层的编码工作
简单来说,如果你是开发者,MongoDB可以让你花更少的时间在数据库上,从而可以专注于业务编程,如果你是DBA,它可以帮助你解决系统的高可用,高性能,以及横向扩展的痛点;如果你是架构师,或者是产品经理,MongoDB是一个非常灵活的数据库,可以快速响应业务的需求变化;这就是MongoDB作为一个应用数据库的最大优势;
学习MongoDB的难点有哪些呢??
MongoDB是五大数据库之中唯一的非关系型数据库,所谓的NoSQL,这就意味着,一般技术人员所熟知的数据库知识在开始使用MongoDB的时候不一定有很大帮助;相反如果你不摒弃掉哪些传统的关系型数据库理念,大概率上你会用一种错误的方式去设计和使用它;最终无法达到最想要的效果;
具体来说有这几个难点:
1) 、MongoDB使用JSON的数据模型,鼓励使用更多的文档嵌套方式来减少多表关联的设计,从而达到易用,高性能的目的,但是这种反范式的文档模型设计目前并没有完整的理论支持;导致即使想系统地学习,也没有太好的书籍或者材料可以参考;
2) 、MongoDB依赖于JSON和Javascript语法,对于开发者来说,比较简单,但是对于运维和DBA的同学来说,这需要额外的学习成本;
3) 、MongoDB通过分片来进行横向扩展,分片的设计和调优相对比较复杂,主要是要考虑到一些MongoDB本身的技术实现以及数据均衡带来的性能影响;所以这方面的话需要一定的深入的学习;
MongoDB和关系型数据库对比
2、MongoDB的特性
MongoDB的3大技术特色如下所示:
除了上图所示的还支持:
二级索引、动态查询、全文搜索 、聚合框架、MapReduce、GridFS、地理位置索引、内存引擎 、地理分布等一系列的强大功能。
但是其也有些许的缺点,例如:
多表关联: 仅仅支持Left Outer Join
SQL 语句支持: 查询为主,部分支持
多表原子事务: 不支持
多文档原子事务:不支持
16MB 文档大小限制(可以使用db.isMaster().maxBsonObjectSize查看) 不支持中文排序 ,服务端 Javascript 性能欠佳
3、关系型数据库与mongodb对比
存储方式对比:
在传统的关系型数据库中,存储方式是以表的形式存放,而在MongoDB中,以文档的形式存在。
数据库中的对应关系,及存储形式的说明
MongoDB与SQL的结构对比详解
SQL Terms/Concepts | MongoDB Terms/Concepts |
---|---|
database | database |
table | collection |
row | document or BSON document |
index | index |
table joins | embedded documents and linking |
primary keySpecify any unique column orcolumn combination asprimary key. | primary keyIn MongoDB, the primary key isautomatically set to the _id field. |
aggregation (e.g. group by) | aggregation pipelineSee the SQL to Aggregation MappingChart. |
4、MongoDB数据存储格式
JSON格式
JSON 数据格式与语言无关,脱胎于 JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json。
MongoDB 使用JSON(JavaScript ObjectNotation)文档存储记录。
JSON数据库语句可以容易被解析。
Web 应用大量使用,NAME-VALUE 配对
BSON格式
BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式。BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。
二进制的JSON,JSON文档的二进制编码存储格式 BSON有JSON没有的Date和BinData
MongoDB中document以BSON形式存放
eg:
db.meeting.insert({meeting:“M1 June",Date:"2018-01-06"});
5、MongoDB适用场景
-
网站数据、缓存等大尺寸、低价值的数据 在高伸缩性的场景,用于对象及JSON数据的存储。 游戏场景,使用 MongoDB
-
存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新 物流场景,使用 MongoDB
-
存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
-
社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
-
物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
-
视频直播,使用 MongoDB 存储用户信息、礼物信息等
6、MongoDB 慎用场景
慎用场景 | 原因 |
---|---|
PB 数据持久存储大数据分析数据库 | Hadoop、Spark提供更多分析运算功能和工具,并行计算能力更强MongoDB + Hadoop/Spark |
搜索场景:文档有几十个字段,需要按照任意字段搜索并排序限制等 | 不建索引查询太慢,索引太多影响写入及更新操作 |
ERP、CRM或者类似复杂应用,几十上百个对象互相关联 | 关联支持较弱,事务较弱 |
需要参与远程事务,或者需要跨表,跨文档原子性更新的 | MongoDB 事务支持仅限于本机的单文档事务 |
100% 写可用:任何时间写入不能停 | MongoDB换主节点时候会有短暂的不可写设计所限 |
更多推荐
所有评论(0)