mongodb,redis,mysql 简要对比

本篇内容大部分不是原创,转载的会贴有链接。

准备学习下数据库,想对目前的主流数据库做一个简单的了解分析,就搜集了资料整理到了一块。

当下主流的要数NoSql数据库了,拥有强大的高并发能力。

mongodb:

它是一个内存数据库,数据都是放在内存里面的。

对数据的操作大部分都在内存中,但mongodb并不是单纯的内存数据库。

持久化方式:

mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。

然后,mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

至于mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,mongodb在内存中修改了数据后,mmap数据flush到硬盘之前,系统宕机了,数据就会丢失。

mmap详解链接:http://www.cnblogs.com/techdoc/archive/2010/12/22/1913521.html

redis:

它就是一个不折不扣的内存数据库了。

持久化方式:

redis所有数据都是放在内存中的,持久化是使用RDB方式或者aof方式。

解密redis持久化:http://blog.nosqlfan.com/html/3813.html

mysql:

无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。

数据量和性能:
当物理内存够用的时候,redis>mongodb>mysql
当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。
实际上如果redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。
但是,mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。
mongodb还是能够保证性能。有人使用mongodb存储了上T的数据。
mysql,mysql根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能表现。
当物理内存和虚拟内存都不够用的时候,估计除了mysql你没什么好选择了。
其实,从数据存储原理来看,我更倾向于将mongodb归类为硬盘数据库,但是使用了mmap作为加速的手段而已。
简说mmap:
mmap系统调用并不是完全为了用于共享内存而设计的。它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件进行操作。
mmap 系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用。 read(),write()等操作。mmap并不分配空间, 只是将文件映射到调用进程的地址空间里, 然后你就可以用memcpy等操作写文件, 而不用write()了.写完后用msync()同步一下, 你所写的内容就保存到文件里了. 不过这种方式没办法增加文件的长度, 因为要映射的长度在调用mmap()的时候就决定了。

下面是redis和mongodb的对比图:
MongoDB是文档型数据库,使用bson结构,可以更加灵活的处理嵌套结构的数据。是这三个里最接近关系型数据库的。
Redis是k-v型数据库,目标是做高效的分布式缓存。数据一般不实时落地。也不适合做存储和分析。
HBase是列式数据库,BigTable的一种实现,目标是高效存储大量数据,支持列压缩,行事务。适合Schema-less的数据。
  • Redis为内存型KV系统,处理的数据量要小于HBase与MongoDB
  • Redis很适合用来做缓存,但除此之外,它实际上还可以在一些“读写分离”的场景下作为“读库”来用,特别是用来存放Hadoop或Spark的分析结果。
  • Redis的读写性能在100,000 ops/s左右,时延一般为10~70微妙左右;而HBase的单机读写性能一般不会超过1,000ops/s,时延则在1~5毫秒之间。
  • Redis的魅力还在于它不像HBase只支持简单的字符串,他还支持集合set,有序集合zset和哈希hash

MongoDB做高性能数据库,Redis做缓存,HBase做大数据分析。MongoDB还无法取代关系型数据库。

传统关系型数据库面对数据规模、数据模型复杂时的不足,导致了NoSQL的快速发展,后者易扩展,性能高,支持灵活的数据模型。

MongoDB是高性能、无模式的文档型数据库,支持二级索引,非常适合文档化格式的存储及查询。MongoDB的官方定位是通用数据库,确实和MySQL有些像,现在也很流行,但它还是有事务、join等短板,在事务、复杂查询应用下无法取代关系型数据库。

Redis是内存型Key/Value系统,读写性能非常好,支持操作原子性,很适合用来做高速缓存。

HBase存储容量大,一个表可以容纳上亿行、上百万列,可应对超大数据量要求扩展简单的需求。Hadoop的无缝集成,让HBase的数据可靠性和海量数据分析性能(MapReduce)值得期待。

所以说,关系型数据库和NoSQL各有优劣,两者结合,可以覆盖更多的业务场景。

网易云提供三副本高可用的[MongoDB](MongoDB 服务_MongoDB 云端解决方案-网易云)云端解决方案,并为备份、监控和性能特别优化,使用[Redis](Redis_缓存服务_key-value在线存储服务-网易云)构建高性能缓存,支持数据持久化,使用HBase支持大数据分析。

mongodb,redis,mysql简要对比相关推荐

  1. mongodb与mysql命令对比 (前人笔记+自己添加)

    mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(col ...

  2. mongodb与mysql命令对比

    mongodb与mysql命令对比 (在前辈的基础上,做了一些整理及修改,同时也添加了一些内容) 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组 ...

  3. mongodb和mysql的对比_MongoDB和MySQL的区别

    http://www.cnblogs.com/caihuafeng/p/5494336.html MongoDB(文档型数据库):提供可扩展的高性能数据存储 一. 1.基于分布式文件存储 2.高负载情 ...

  4. mongodb和mysql的对比_Mongodb与mysql语法比较

    Mongodb与mysql语法比较 mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据 ...

  5. MongoDB与MySQL效率对比

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u014513883/article/ details/49365987 本文主要通过批量与非批量对比操作的方式介绍MongoD ...

  6. 后端常用数据库的使用MongoDB, Redis, Mysql

    后端常用数据库的使用 数据库安装 (ubuntu操作系统) mysql安装 redis安装 mongodb安装 mysql 使用 (增删改查) mysql 数据库前置知识: mysql 是一个软件, ...

  7. mongodb,redis,mysql 简要对比

    本篇内容大部分不是原创,转载的会贴有链接. 准备学习下数据库,想对目前的主流数据库做一个简单的了解分析,就搜集了资料整理到了一块. 当下主流的要数NoSql数据库了,拥有强大的高并发能力. mongo ...

  8. 数据库mongodb和mysql对比

    数据库主流分类: 非关系型数据库(Nosql database) 关系型数据库(relation database management system) mysql概述 mysql采用table和结构 ...

  9. MongoDB和MySQL的区别

    http://www.cnblogs.com/caihuafeng/p/5494336.html MongoDB(文档型数据库):提供可扩展的高性能数据存储 一. 1.基于分布式文件存储 2.高负载情 ...

最新文章

  1. 电子科技大学计算机网络实验,计算机网络实验电子科技大学.doc
  2. Base64转文件,图片
  3. 无法使用共享文件夹?VMware怎么安装VMware Tools? (GCC、kernel headers、make)(失败)
  4. Java黑皮书课后题第6章:*6.4(反序显示一个整数)使用下面的方法体编写方法,反序显示一个整数…例如reverse(3456)返回6543,编写一个测试程序,提示用户输入一个整数,然后显示它的反序
  5. mybatis-嵌套(关联)查询/ N+1 / 延迟加载
  6. 再说WCF Data Contract KnownTypeAttribute
  7. 论文浅尝 - AAAI2021 | 基于对比学习的三元组生成式抽取方法
  8. 四个人过桥的题目_云南的几种“勾魂”特产,舌尖上的美味,让人回味无穷,你吃过吗...
  9. MVC中利用ActionFilterAttribute过滤关键字
  10. 低代码开发是如何解决企业招聘技术人才难题?
  11. LATEX数学式哪种字号比较漂亮
  12. Netty工作笔记0046---TaskQueue自定义任务
  13. c mysql开发工具_Windows平台下Mysql C程序设计
  14. Kerberos下pyhive使用
  15. 火焰检测方法和数据集记录
  16. 微软模拟飞行2020 数字化建模分析
  17. 已知六个固定点P0(3+2+1),过固定点向量v1,动点到固定点距离L,被测基准块坐标系在并联机构动系中的位姿,并联机构定系在测量系中的位姿,求解动系在测量系中位姿Q的程序
  18. python中国社区-Python中文社区名称的统一
  19. linux 脚本判断进程,Shell实现判断进程是否存在并重新启动脚本
  20. 运放:运放+TL431+MOS 构成的恒流电路

热门文章

  1. 查看OpenStack版本
  2. maven_使用Maven将文件上传和下载到S3
  3. html里面的crossorigin属性,HTML5 标签里的 crossorigin 属性到底有什么用? | Chrisyue's Blog...
  4. lay和lied_lie和lay的区别
  5. 计算机速录学什么,学速录的要求有哪些
  6. 皮一皮:现在知道公司老说信息完整的重要性...
  7. 每日一皮:当我在重构时,总是有惊喜出现.......
  8. Windows 95 诞生 25 周年
  9. 曝光 Facebook 内部高效工作 PPT 指南
  10. 谁说程序员干不过写ppt的,码农就该这样雄起