MySQL、Redis 和 MongoDB 的比较

1、RDBMS

RDBMS(关系型数据库管理系统),是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,本质上使用一张二维表来表示关系。主要代表:Oracle、SQL Server、MySQL、SQLite。

关系型数据库的特点:

  • 关系型数据库支持事务,读写操作都是事务的,具有ACID的特点;
  • 关系型数据库具有固定的表结构,即数据存在特定结构的表中;
  • 关系型数据库必须定义好表和字段结构后才能添加数据;
  • 关系型数据库需要增加外部关联数据的话,规范化做法是在原表中增加一个外键,关联外部数据表;
  • 关系型数据库中可以使用JOIN表链接方式将多个关系数据表中的数据用一条简单的查询语句查询出来;
  • 关系型数据库不允许删除已经被使用的外部数据,以保证数据完整性;

2、SQL

SQL (Structured Query Language) 是结构化查询语言,是一种用来操作RDBMS的数据库语言。SQL 语句的作用是实现数据库的客户端和服务端之间的通信。当前几乎所有关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 Oracle、SQL Server、MySQL、SQLite 等所有的关系型的数据库。

SQL语句主要分为:

  • DQL:数据查询语言,用于对数据进行查询,如select
  • DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、delete
  • TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
  • DCL:数据控制语言,进行授权与权限回收,如grant、revoke
  • DDL:数据定义语言,进行数据库、表的管理等,如create、drop

3、NoSQL

NoSQL(not only sql),泛指非关系型的数据库,不支持SQL语法,NoSQL中存储的数据都是键值对(K-V)形式。NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的 api 和语法,以及擅长的业务场景。NoSQL中的产品种类相当多,主要代表:MongoDB、Redis、CouchDB、Hbase hadoop、Cassandra hadoop。

非关系型数据库的特点:

  • 非关系型数据库没有事务这个概念,每一个数据集的操作都是原子级的;
  • 非关系型数据库则更加灵活和可扩展,存储方式可以省是JSON文档、哈希表或者其他方式;
  • 非关系型数据库的数据可以在任何时候任何地方添加,不需要先定义表;
  • 非关系型数据库需要增加外部关联数据的话,规范化做法是在原表中增加一个外键,关联外部数据表;这种规范化的外部数据表做法以外,还可以把外部数据直接放到原数据集中,以提高查询效率;
  • 非关系型数据库未提供类似JOIN的查询方式对多个数据集中的数据做查询。所以大部分非关系型数据库都使;用非规范化的数据存储方式存储数据;
  • 非关系型数据库中没有这种强耦合的概念,可以随时删除任何数据。

4、MySQL

MySQL 是一个关系型数据库,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 的数据、索引都存放在硬盘中、使用的时候才交换到内存中。

MySQL的特点:

  • MySQL 是开源的,所以你不需要支付额外的费用;
  • MySQL 是一个高性能且相对简单的数据库系统,与一些更大系统的设置和管理相比,其复杂程度较低;
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库;
  • MySQL 使用标准的SQL数据语言形式;
  • MySQL 良好的运行效率,有丰富信息的网络支持;
  • MySQL 提供了事务性和非事务性存储引擎;
  • MySQL 支持多种编程语言,包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等;
  • MySQL 可移植性好,可以运行于多个系统上;
  • MySQL 高性能,MySql的核心程序采用完全的多线程编程,支持多处理器;
  • MySQL 是可以定制的,采用了GPL协议,你可以修改源码来开发自己的 MySQL 系统。

5、Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis 是一个高性能的key-value数据库,是一个内存型数据库,即数据存储在内存中。

Redis 的特点:

  • Redis 不仅仅支持简单的key-value类型的数据,同时还提供string、list、set、zset、hash等数据结构的存储;
  • Redis 性能极高,读写的速度快;
  • Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
  • Redis 支持数据的备份,即master-slave模式的数据备份;
  • Redis 只能使用单线程,性能受限于CPU性能;
  • Redis 支持简单的事务需求,但业界使用场景很少,并不成熟;
  • Redis 在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用;
  • Redis 都是Key-Value类型,不适合在不同数据集之间建立关系,也不适合进行查询搜索。

6、MongoDB

MongoDB 是用 C++ 语言编写的,是一个介于关系数据库和非关系数据库之间的产品,基于分布式文件存储的开源数据库系统,是非关系数据库当中功能最丰富、最像关系数据库的。MongoDB 是一种文档型的数据库,所谓文档型的数据库,即可以存放xml、json、bson类型的数据。数据结构由键值(key=>value)对组成,MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。

MongoDB 的特点:

  • MongoDB 数据结构比较单一,但支持丰富的数据表达;
  • MongoDB 查询功能比较强大,擅长查询JSON数据;
  • MongoDB 支持对数据建立索引;
  • MongoDB 支持大数据量的存储,内置 GridFS,可以用于存放大量小文件;
  • MongoDB 不支持事务操作
  • MongoDB 易扩展,第三方支持丰富;
  • MongoDB 性能高,具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单;
  • MongoDB 数据模型灵活,不需要事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
  • MongoDB 是面向文档结构的存储方式,能够更便捷的获取数据:json 的存储格式。

7、MySQL 和 Redis 的区别

(1)数据库类型

MySQL 是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中。

Redis是非关系型数据库,也是缓存数据库,即将数据存储在缓存中。

(2)作用上

MySQL 用于持久化的存储数据到硬盘,功能强大,频繁的访问数据库时,读取速度较慢,也会导致数据库的负载过高。

Redis 用于存储使用较为频繁的数据到缓存中,读取速度快,提高运行效率,但是保存时间有限。

8、Redis 和 MongoDB 的区别

(1)内存和存储

Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
Redis2.0 后增加虚拟内存特性,突破物理内存限制;数据可以设置时效性。

MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
MongoDB 适合大数据量存储,依赖系统虚拟内存管理,采用镜像文件存储;内存占有率比较高,官方建议独立部署在64位系统(32位有最大2.5G文件限制,64位没有改限制)

(2)可靠性(持久化方式)

Redis 依赖基于快照形式的RDB 或 基于磁盘的AOF进行持久化,增强了可靠性,同时也影响了访问性能。

MongoDB 从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性。

(3)一致性(事务)

Redis 事务支持比较弱,只能保证事务中的每个操作连续执行。

MongoDB 不支持事物,靠客户端自身保证。

(4)可用性(单点问题)

Redis 依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致 hash 机制。

MongoDB 支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。

(5)数据分析方面

Redis 不支持数据分析功能。

MongoDB 内置数据分析功能(mapreduce)。

(6)集群方面

Redis 更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。

MongoDB 建议集群部署,更多的考虑到集群方案。

(7)应用场景

Redis 适用于数据量较小的性能操作和运算上。

MongoDB 主要解决海量数据的访问效率问题。

9、MySQL 和 MongoDB 的区别

(1)数据库类型

MySQL 是关系型数据库,需提前定义好表和字段结构,不易被扩展。

MongoDB 是非关系型数据库,非常容易被扩展。

(2)事务方面

MySQL 支持事务,具有ACID的特点,相对比较安全。

MongoDB 不支持事务。

(3)运行效率方面

MySQL 的数据存储在硬盘中,读取速度较慢。

MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度,毕竟内存的I/O效率比磁盘高多了。

(4)存储方面

MySQL 数据库中,数据是以表单为媒介进行存储的,每个表单均拥有纵向的列和横向的行。

MongoDB以一种直观文档的方式来完成数据的存储。它很像JavaScript中定义的JSON格式,不过数据在存储的时候MongoDB数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做BSON的格式,即Binary-JSON。

(5)数据结构模式

MySQL 数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成。

MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值