mysql mongo redis 对比

37 篇文章 3 订阅

mysql mongo redis 对比

mongo

  • 内存数据库

  • 更多的节点,可以保证服务器性能

  • 数据存储为一个文档,数据结构由键值(key=>value)对组成

  • MongoDB 数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做 BSON 的格式,即 Binary-JSON

  • 非关系型数据库(NoSQL ),属于文档型数据库

  • MongoDB 对数据之间事务关系支持比较弱

  • 存储方式:虚拟内存+持久化

  • 索引是b树(因为每个数据是一个文档,不需要连续的空间)

  • 持久化方式

    • 通过 mmap 的方式映射到内存某个区域内
    • MongoDB 在内存中修改了数据后,mmap 数据flush到硬盘之前,系统宕机了,数据就会丢失
    • 可以设置任何属性的索引 (如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序
  • 主要特点

    • 一个面向文档存储,操作起来比较简单和容易
    • 可以设置任何属性的索引,实现快速查询
    • 可以通过本地或者网络建立数据镜像,容易扩展
    • 支持丰富的表达式,查询容易
    • Map/reduce 主要是用来对数据进行批量处理和聚合操作,相当于MySQL里 GroupBy 功能的扩展版
    • GridFS 是 MongoDB 中的一个内置功能,可以用于存放大量小文件
    • MongoDB 允许在服务端执行脚本,可以用 Javascript 编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可
  • MongoDB优点

    • 性能优越:快速!在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快
    • 高扩展:第三方支持丰富(这是与其他的 No SQL 相比,MongoDB 也具有的优势)
    • 自身的 Failover 机制
    • 弱一致性(最终一致),更能保证用户的访问速度
    • 文档结构的存储方式,能够更便捷的获取数据: json 的存储格式
    • 支持大容量的存储,内置 GridFS
    • 内置 Sharding
  • MongoDB缺点

    • MongoDB不支持事务操作
    • MongoDB占用空间过大(空间换时间)
    • MongoDB 没有如 MySQL 那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方
    • 频繁删除写入操作,碎片引发的结果,
      • 一个是索引会出现性能问题
      • 一定的时间后,所占空间会莫明其妙地增大

Redis

  • 它就是一个不折不扣的内存数据库
  • Redis所有数据都是放在内存中的,持久化是使用 RDB 方式或者 aof 方式
  • 事务支持

MySQL

  • 无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。
  • 关系型数据库
  • 在不同的引擎上有不同 的存储方式
  • 缺点就是在海量数据处理的时候效率会显著变慢

mysql redis mongo 数据量和性能的比较

  • 当物理内存够用的时候,Redis>MongoDB>MySQL
  • 物理内存不够用的时候,Redis和MongoDB都会使用虚拟内存
  • MongoDB业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap 的交换较少
  • MongoDB还是能够保证性能。有人使用MongoDB存储了上T的数据

MongoDB 与MySQL 的适用场景

  • MongoDB 的适用场景

    • 数据不是特别重要(例如通知,推送这些)
    • 数据表结构变化较为频繁
    • 数据量特别大
    • 数据的并发性特别高
    • 数据结构比较特别(例如地图的位置坐标)
  • MongoDB 与MySQL 的比较

    • 事务亲和性
    • 表结构固定

MongoDB 相对于MySQL的优势

- 适合那些对数据库具体数据格式不明确或者数据库数据格式经常变化的需求模型
- 自带一个分布式文件系统,可以很方便地部署到服务器机群上
- 自带了对map-reduce运算框架的支持,这也很方便进行数据的统计,类似group-BY
- MongoDB与MySQL命令对比 传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成
- MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成
- MongoDB 对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点

MySQL与Redis的区别

- mysql和redis的数据库类型
    - mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢
    - redis是NOSQL,非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限
- 运行机制
    - mysql每次请求访问数据库时,都存在着I/O操作
    - redis缓存就是数据交换的缓冲区(cache),读取速度快
- 需求上
    - mysql和redis因为需求的不同,一般都是配合使用
    - 需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存储数据在MySQL和Redis之间做同步‘

Redis和mongo的区别

- 二者在内存映射的处理过程,持久化的处理方法不同
    - mongo mmap
    - redis AOF RDB
- 实现语言
    - mongo c++
    - redis c++/c
- 协议
    - mongo BSON/二进制定义
    - redis RESP
- 性能
    - mongo 依赖内存,TPS较高
    - redis 依赖内存,TPS非常高
    - redis>mongo
- 可操作性
    - mongo 丰富的数据表达、索引;最类似于关系数据库,支持丰富的查询语言
    - redis 数据丰富,较少的IO
    - mongo>redis
- 内存及存储
    - mongo
        - 适合大数据量存储,依赖系统虚拟内存管理,采用镜像文件存储;内存占有率比较高,官方建议独立部署在64位系统(32位有最大2.5G文件限制,64位没有改限制
    - redis
        - Redis2.0后增加虚拟内存特性,突破物理内存限制;数据可以设置时效性,类似于memcache
- 可用性
    - mongo支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制
    - redis 依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制;不支持自动sharding,需要依赖程序设定一致hash机制
    - MongoDB优于Redis;单点问题上,MongoDB应用简单,相对用户透明,Redis比较复杂,需要客户端主动解决。(MongoDB 一般会使用replica sets和sharding功能结合,replica sets侧重高可用性及高可靠性,而sharding侧重于性能、易扩展)
- 可靠性
    - mongo从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性
    - redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能
    - MongoDB优于Redis
- 一致性
    - mongo不支持事物,靠客户端自身保证
    - redis支持事物,比较弱,仅能保证事物中的操作按顺序执行
    - Redis优于MongoDB
- 数据分析
    - mongo内置数据分析功能(mapreduce)
    - redis 不支持
    - redis > mongo
- 应用场景
    - mongo海量数据的访问效率提升
    - redis较小数据量的性能及运算
- 都不适合的场景
    - 需要使用复杂sql的操作
    - 需要事务系统

mysql和mongo的区别

内容mongomysql
数据类型非关系型关系型
存储方式虚拟内存+持久化不同的存储引擎存储方式不一样
架构特点通过副本集和sharding实现高可用单点,M-S,MHA,MMM,Cluster
数据处理方式基于内存,将数据存储在物理内存中,从而达到高速读写不同的引擎有不同的特点
  • mongo
    • 优势
      • 快速
      • 高扩展- sharding机制
      • 自身的failove机制- replica机制
      • json格式存储
    • 劣势
      • 锁机制,现在全局锁降低为db锁,依然会产生消息队列堆积的可能
      • 无事务机制
      • MongoDB占用空间过大
      • 整体成熟度不如mysql
  • mysql
    • 优势
      • 不同的引擎上有不同 的存储方式
      • 查询语句是使用传统的 sql 语句,拥有较为成熟的体系,成熟度很高
      • 开源份额不断增加
    • 缺点
      • 在海量数据处理的时候效率会显著变慢

参考文档

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值