MySQL与MongoDB的区别
MySQL与MongoDB都是日常开发中经常使用的数据库,但是MySQL是传统的关系型数据库,而MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优缺点,接下来将详细介绍其各自的优缺点。
MySQL(关系型数据库)
MySQL是传统的关系型数据库,至于什么是关系型数据库,相信大家都知道,此处便不再赘述。
优势:
- 在不同的引擎上有不同 的存储方式。
- 查询语句是使用传统的SQL语句,拥有较为成熟的体系,成熟度很高。
- MySQL的市场占有率在不断上升。
劣势:在对海量数据进行处理的时候效率会显著变慢。
MongoDB(非关系型数据库)
非关系型数据库(nosql ),属于文档型数据库。先解释一下文档型数据库,即可以存放xml、json、bson类型系那个的数据。这些数据具备自述性,呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。MongoDB就属于非关系型数据库(nosql )。文档是MongoDB中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
优势:
- 速度快,在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
- MongoDB的高可用和集群架构拥有十分高的扩展性。
- 在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
- MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。
劣势:
- 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
- MongoDB占用空间过大。
- 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
- 开发文档不够完善
主要的区别
为了更加直观的分析两者之间的区别,直接创建表格来对比两者间的区别
数据库 | MySQL | MongoDB |
---|---|---|
数据库模型 | 关系型数据库 | 非关系型数据库 |
存储方式 | 不同的引擎有不同的存储方式 | 虚拟内存 + 持久化 |
操作语法 | SQL语句 | MongoDB查询方式(类似JavaScript的函数) |
数据处理方式 | 不同引擎有自己的特点 | 基于内存,将热数据存放在物理内存中,从而达到高速读写 |
成熟度 | 较高 | 较低 |
市场性 | 开源数据库,市场份额不断增长 | NoSQL数据库中,比较完善且开源,使用人数在不断增长 |
一致性 | 支持事务操作,一致性较高 | 仅支持单文档事务操作,弱一致性 |
内存占用情况 | 较低 | 较高 |
应用场景
如果需要将MongoDB作为后端DB来代替MySQL使用,即这里MySQL与MongoDB属于平行级别,那么,这样的使用可能有以下几种情况的考量:
-
MongoDB所负责部分以文档形式存储,能够有较好的代码亲和性,json格式的直接写入方便。(如日志之类)
-
从data models设计阶段就将原子性考虑于其中,无需事务之类的辅助。
-
MongoDB本身的failover机制,无需使用如MHA之类的方式实现。