mysql与mongo对比
mysql是关系型数据库,而mongo是非关系型数据库
# 一. 基本介绍
# 1. MYSQL
1、在不同的引擎上有不同的存储方式。 2、查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。 3、开源数据库的份额在不断增加,mysql的份额页在持续增长。 4、缺点就是在海量数据处理的时候效率会显著变慢。
# 2. MongoDB
1、存储方式:虚拟内存+持久化。 2、查询语句:是独特的MongoDB的查询方式。 3、适合场景:事件的记录,内容管理或者博客平台等等。 4、架构特点:可以通过副本集,以及分片来实现高可用。 5、数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。 6、成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。
# 二. Mongo优缺点
优势: 1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。 2、MongoDB的高可用和集群架构拥有十分高的扩展性。 3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。 4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。 劣势: 1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。 2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。 3、MongoDB占用空间过大。
# 三.对比
数据库 | MongoDB | MySQL |
---|---|---|
数据库模型 | 非关系型 | 关系型 |
存储方式 | 以类JSON的文档的格式存储 | 不同引擎有不同的存储方式 |
查询语句 | MongoDB查询方式(类似JavaScript的函数) | SQL语句 |
数据处理方式 | 基于内存,将热数据存放在物理内存中,从而达到高速读写 | 不同引擎有自己的特点 |
成熟度 | 新兴数据库,成熟度较低 | 成熟度高 |
广泛度 | NoSQL数据库中,比较完善且开源,使用人数在不断增长 | 开源数据库,市场份额不断增长 |
事务性 | 仅支持单文档事务操作,弱一致性 | 支持事务操作 |
占用空间 | 占用空间大 | 占用空间小 |
join操作 | MongoDB没有join | MySQL支持join |
# 数据模式和能力
mongo比mysql存储数据更加了灵活,且数据集较大时,mongo具有更高的数据处理优势
# 性能和速度
相反,由于MongoDB能够为非结构化数据提供灵活、快速的性能,当用户难以预先设计好数据模式时,文档数据存储将是一个很好的选择。当然,如果数据种类过于丰富,用户很难在数据属性上创建出对应的索引,那么他们就需要频繁地优化数据模式。而此举则可能产生数据的不一致性。
# 安全性
MySQL采用的是基于特权的安全模型。该模型既能够提供基本的身份验证,又可以在特定的数据库上实施用户特权的管控。在数据库与服务器之间传输数据的过程中,MySQL必须采用安全套接字层(SSL,一种安全协议)的方式,来加密连接。
而MongoDB的安全性主要包括:基于角色的访问控制、身份验证、授权和审核等。当然,如果需要加密,它也可以实施安全传输层(TLS)和SSL协议。
因此就安全性而言,常用业务应用更趋向于使用成熟的MySQL来实现。
# ACID:原子性、一致性、隔离性和持续性
众所周知,ACID是确保数据有效性的一组数据库事务属性。MySQL的事务一直都能符合ACID。而追求速度和高可用性的MongoDB,在ACID方面并不占优。直到2018年,MongoDB才在多文档事务中满足ACID。不过,该选项在默认情况下是关闭的。
# 查询
当需要从数据库表或表的组合中请求信息时,MySQL会使用最流行、最广泛的查询语言—SQL,通过DDL和DML与数据库进行通信。
而MongoDB使用的是非结构化的查询语言。为了能够从JSON文档数据库处请求并获取数据或信息,用户需要事先指定与结果应匹配的文档属性。
# 该如何选择MongoDB与MySQL
作为文档数据库,由于MongoDB并不限制用户存储数据的体量和类型,因此适合大数据的应用环境。这对基于云的服务将特别有利。而得益于MongoDB的水平可扩展能力,以及与云服务的敏捷性结合,它不但能够减少开发者的工作量,简化业务与项目的扩展流程,还能够提供高可用性和数据的快速恢复。
不过,MongoDB在数据的可靠性、一致性、以及安全性等方面,不如MySQL。此外,当应用程序需要提供多行事务(如,会计和银行系统)时,以MySQL为首的关系型数据库提供了高事务处理率(high transaction rate)。实际上,与MySQL专注于提供事务的ACID和安全性不同的是,MongoDB更专注于提供高插入率(high insert rate)。
因此,我强烈建议您将MySQL用于具有固定数据模式、且不打算在数据的多样性方面进行扩展的企业或项目。毕竟,在确保数据完整性和可靠性的同时,MySQL不但方便被维护,而且成本较低。
相反,MongoDB是那些正在成长、但数据架构并不固定的业务或项目的最合适选择。由于它允许开发者在无需任何结构的情况下,自由地更新、检索和存储文档,因此它通常适用于需要内容管理,物联网(IoT)处理,以及实时分析等项目中。
参考: