MySQL、MongoDB、Redis区别与介绍

一、MySql

1)Mysql介绍

MySQL是关系型数据库:

  • MySQL也是一种硬盘型数据库,它所有的数据都是存放在硬盘中,需要使用的时候才会交换到内存中。因此MySQL能够处理海量的数据,但是数据量很大的时,速度会稍慢。
  • MySQL的使用需要提前建表,不适用于数据结构变换频繁的情况。

非关系型数据库:MongoDB、Redis

二、MongoDB

1)MongoDB介绍

MongoDB是一个基于分布式文件存储的开源数据库系统,MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。MongoDB的数据索引是B-树。

  • MongoDB 在创建数据库的时候,会直接在磁盘上面分配一组数据文件,所有的集合、索引和数据库的其他元数据都保存在这些文件中。

  • MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内。然后,MongoDB 就在这块区域里面进行数据修改,避免了零碎的硬盘操作。至于 mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,MongoDB 在内存中修改了数据后,mmap 数据flush到硬盘之前,系统宕机了,数据就会丢失。

2)MongoDB的特点

优点:

  • 提供面向文档存储,操作简单
  • 扩展性强,第三方支持丰富
  • 具有failover机制(失效转移:一种备份操作模式,当一个系统因为一些故障无法完成工作的时候,另一个系统自动接替已失效系统的工作继续执行)
  • 支持大容量存储,内置GridFS(可用于存放大量的小文件)
  • 在高负载的情况下,可以添加更多的节点,保证服务器性能

缺点

  • 无事务机制(数据库事务(database transaction)对单个的逻辑单元执行一系列的操作,要么完全执行,要么完全不执行)
  • 占用空间过大
  • 没有mysql那样成熟的维护工具
  • MongoDB 对数据之间事务关系支持比较弱,如果业务这一方面要求比较高的话,MongoDB 还是并不适合此类型的应用

适用场景:

  • 适合那种数据格式不明确
    或者经常变化的模型,比如事件记录、内容管理或者博客平台。

三、Redis

1)Redis介绍

Redis是一种内存数据库,所有的数据都是放在内存之中,定期写入磁盘中,当内存不够的时候,可选择指定的LRU算法删除数据。Redis是基于哈希字典建立的,因此其索引方式是哈希。

特点:

  • 由于数据存放在内存中,因此读写性能高
  • 支持丰富的数据类型,如键值对、集合、列表、散列存储

集群:

MongoDB 集群技术比较成熟,Redis从3.0开始支持集群。

Mongo和Redis之间的性能比较:

引用https://blog.csdn.net/CatStarXcode/article/details/79513425

数据量和性能:

当物理内存够用的时候,redis>mongodb>mysql

当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。

实际上如果redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。

但是,mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。

mongodb还是能够保证性能。有人使用mongodb存储了上T的数据。

mysql,mysql根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能表现。

当物理内存和虚拟内存都不够用的时候,估计除了mysql你没什么好选择了。

其实,从数据存储原理来看,我更倾向于将mongodb归类为硬盘数据库,但是使用了mmap作为加速的手段而已。

猜你喜欢

转载自blog.csdn.net/qq_36189144/article/details/85262879