MySQL、Redis、MongoDB区别

MySQL 关系型数据库

  • mysql数据和索引都存放在硬盘中。到要使用的时候才交换到内存中,能够处理远超过内存总量的数据。
  • 关系型数据库
  • 在不同的引擎上有不同的存储方式
  • 查询语句是使用传统的SQL语句,拥有较为成熟的体系,成熟度高
  • 开源数据库的份额在不断增加,MySQL的份额也在持续增长
  • 缺点就是海量数据处理的时候效率显著变慢

Redis 非关系型数据库

  • 内存数据库
  • 持久化:
    • Redis所有数据都存放在内存中,持久化是使用RDB方式和AOF方式

RDB持久化也分两种:SAVE和BGSAVE

  • SAVE是阻塞式的RDB持久化,当执行这个命令时redis的主进程把内存里的数据库状态写入到RDB文件(即上面的dump.rdb)中,直到该文件创建完毕的这段时间内redis将不能处理任何命令请求。
  • BGSAVE属于非阻塞式的持久化,它会创建一个子进程专门去把内存中的数据库状态写入RDB文件里,同时主进程还可以处理来自客户端的命令请求。但子进程基本是复制的父进程,这等于两个相同大小的redis进程在系统上运行,会造成内存使用率的大幅增加。

持久化之增量写入:AOF
与RDB的保存整个redis数据库状态不同,AOF是通过保存对redis服务端的写命令(如set、sadd、rpush)来记录数据库状态的,即保存你对redis数据库的写操作

MongoDB

  • 内存数据库,数据都是存放在内存里面
  • 对数据的操作大部分在内存中,但是MongoDB并不是单纯的内存数据库
  • MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统
  • 在高负荷的情况下,添加更多的节点,,可以保证服务性能
  • MongoDB在web应用提供可扩展的高性能数据存储方案
  • MongoDB将数据存储为一个文档,数据结构由键值对(key=>value)组成,MongoDB文档类似于JSON对象,字段值可以包含其他文档、数组以及文档数组
MongoDB 的存储特点
  • 在传统的关系型数据库中,数据库是以表单为媒介进行储存的,每个表单均有纵向的列和横向的行
  • 由此可见,相比较MySQL,MongoDB以一种直观 的文档的方式来完成数据的存储。它像JavaScript中定义的JSON格式,不过数据存储的时候MongoDB数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做BSON的格式,即Binary-JSON
MongoDB的应用场景
  • 数据格式无法明确定义时,MongoDB的这一鲜明特性脱颖而出,相比传统数据库,MongoDB非常容易被扩展,为写代码带来极大方便
  • 不过MongoDB对数据之间的事务支持比较弱,要是业务这方面要求比较高的话,MongoDB并不适合这类型的应用
  • 非关系型数据库,属于文档类型数据库,文档类型数据库就是可以存放xml、json、bson类型的数据,这些数据具备自述性,呈现分层的树状数据结构,数据由键值对(key=>value)组成
储存方式:虚拟内存+持久化
  • 持久化方式:
    • MongoDB的所有数据实际是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域
    • 然后,MongoDB就在这块区域里面进行数据修改,避免了零碎的硬盘操作
    • 至于mmap上的内容flush到硬盘,系统宕机了,数据就会丢失

mongodb与mysql不同,mysql的每一次更新操作都会直接写入硬盘,但是mongo不会,做为内存型数据库,数据操作会先写入内存,然后再会持久化到硬盘中去,那么mongo是如何持久化的呢

mongodb在启动时,专门初始化一个线程不断循环(除非应用crash掉),用于在一定时间周期内来从defer队列中获取要持久化的数据并写入到磁盘的journal(日志)和mongofile(数据)处,当然因为它不是在用户添加记录时就写到磁盘上,所以按mongodb开发者说,它不会造成性能上的损耗,因为看过代码发现,当进行CUD操作时,记录(Record类型)都被放入到defer队列中以供延时批量(groupcommit)提交写入,但相信其中时间周期参数是个要认真考量的参数,系统为90毫秒,如果该值更低的话,可能会造成频繁磁盘操作,过高又会造成系统宕机时数据丢失过

主要特点
  • MongoDB的提供了一个面向文档存储,操作起来比较简单和容易
  • 在MongoDB记录中设置任何属性的索引(如:FirstName=“summer”,Address=“8 G andhi Road”)来实现更快的排序
  • 通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性
  • 如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布式在计算机网络中其他节点,这就是所谓的分片
  • MongoDB支持丰富的查询表达式,查询指令使用json形式的标记,可以轻易查询文档中的内嵌的对象及数组
  • MongoDB使用update()命令可以实现替换成的文档(数据)或者一些指定的数据字段
  • MongoDB中map/reduce主要是用来对数据进行批量和聚合操作
  • map和reduce ,map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给reduce函数进行处理
  • MongoDB允许在服务端执行脚本,可以用JavaScript编写,直接在服务端执行,也可以把函数的定义存储在服务端,下次调用
  • MongoDB支持多种语言,python、Java、c++、PHP
      1. 它里面自带了一个名叫 GirdFS 的分布式文件系统,这就为 MongoDB 的部署提供了很大便利。而像 MySQL 这种比较早的数据库,虽然市面上有很多不同的分表部署的方案,但这种终究不如 MongoDB 直接官方支持来得便捷实在。
      1. 另外,MongoDB 内部还自建了对 map-reduce运算框架的支持,虽然这种支持从功能上看还算是比较简单的,相当于MySQL里 GroupBy 功能的扩展版,不过也为数据的统计带来了方便。
      1. MongoDB 在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度,毕竟内存的 I/O 效率比磁盘高多了。
  • MongoDB 以 BSON 结构(二进制)进行存储,对海量数据存储有着很明显的优势。

MongoDB 优点:

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

MongoDB 缺点:

####主要是无事物机制!

  • ① MongoDB 不支持事务操作(最主要的缺点)
  • ② MongoDB 占用空间过大
  • ③ MongoDB 没有如 MySQL 那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值