Redis和MongoDB对比

项目 Redis MongoDB
介绍 Redis 是内存中的数据结构存储,用作数据库,缓存和消息代理。 MongoDB 是遵循文档存储结构的最流行的 NoSQL 数据库之一。
主数据库模型 Redis 遵循键值存储模型。 MongoDB 遵循文档存储模型。
许可 Redis 是基于订阅和开源的。 MongoDB 可以免费使用和开源。
实现语言 Redis 是用 C 语言编写和实现的。 MongoDB 是用 C ++语言编写和实现的。
二级索引 没有
API 和其他访问方法 Redis 遵循专有协议。 MongoDB 遵循使用 JSON 的专有协议。
服务器端脚本 LUA JavaScript 的
分区方法 Redis 使用 Sharding 进行分区。 MongoDB 也使用 Sharding 进行分区。
复制方法 Redis 遵循主从复制。 MongoDB 也遵循主从复制。
可操作性 数据操作方面,redis更好一些,较少的网络IO次数 支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富
MapReduce 没有
一致性概念 最终的一致性和即时一致性 最终的一致性
交易概念 乐观锁定,命令块和脚本的原子执行。 没有
性能 依赖内存,TPS较高 依赖内存,TPS较高
高并发 50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s 善于处理高并发
持久化 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。 数据操作会先写入内存,然后再会持久化到硬盘中去,mongodb在启动时,专门初始化一个线程不断循环(除非应用crash掉),用于在一定时间周期内来从defer队列中获取要持久化的数据并写入到磁盘的journal(日志)和mongofile(数据)处,当然因为它不是在用户添加记录时就写到磁盘上,所以按mongodb开发者说,它不会造成性能上的损耗,因为当进行CUD操作时,记录(Record类型)都被放入到defer队列中以供延时批量(groupcommit)提交写入,但相信其中时间周期参数是个要认真考量的参数,系统为90毫秒,如果该值更低的话,可能会造成频繁磁盘操作,过高又会造成系统宕机时数据丢失过。
内存与数据量 redis在2.0版本后增加了自己的VM特性,突破物理内存的限制;可以对key value设置过期时间(类似memcache) 适合大数据量存储,依赖系统虚拟内存管理,采用镜像文件存储;内存占有率比较高,官方建议独立部署在64位系统(32位有最大2.5G文件限制,64位没有改限制)
内存管理 Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。 MongoDB 数据会优先存于内存,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
可用性 依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制;不支持自动sharding,需要依赖程序设定一致hash机制 支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制
用户权限 简单的基于密码的访问控制。 用户和角色的访问权限。
特色 Redis 被评为世界上最快的数据库。它降低了应用程序的复杂性,简化了开发,加快了产品上市时间,并通过其有远见的数据结构和模块为开发人员提供了前所未有的灵 MongoDB 被认为是下一代数据库。它成功地帮助许多企业通过提供大数据来改变他们的行业。世界上最先进的组织,从最前沿的创业公司到最大的公司,使用 MongoDB 以极低的成本创建前所未有的应用程序。
比较优势 Redis 是一种内存数据库平台,支持各种数据结构,如字符串,散列,集合,列表,有序集,位图,超级日志和地理空间索引。Redis 通过监督分片,重新分片,迁移的所有操作,以完全自动化的方式提供轻松扩展。它还包括持久性,即时自动故障检测,备份和恢复以及跨机架,区域,数据中心,区域和云平台的内存复制。 MongoDB 提供了当今最好的传统数据库以及当今应用程序所需的灵活性,扩展性和性能。MongoDB 是一个巨大的想法数据库。MongoDB 保留了 Relational 数据库最有价值的特性,即强一致性,表达式查询语言和二级索引。它有助于开发人员比 NoSQL 数据库更快地构建功能强大的应用程序
市场指标 Redis Labs 由全球 60000 多家客户组成,在 NoSQL,内存和运营数据库方面的顶级分析报告中一直名列前茅。Redis 被评为否。1 个云数据库,Docker 中的 1 号数据库,1 号 NoSQL 数据存储区,容器中最流行的 NoSQL 数据库。 下载量达到 2000 万(每天下载量达到数千次)。超过 2,000 名客户,包括超过三分之一的财富 100 强。在 Forrester Wave 中被评为领导者:大数据 NoSQL,2016 年第 3 季度。在数据库引擎排名中排名最高的非关系型数据库

1 MongoDB简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
  非关系型数据库 (NoSql),Mongo DB 很好的实现了面向对象的思想 (OO 思想), 在Mongo DB 中 每一条记录都是一个 Document 对象。Mongo DB 最大的优势在于所有的数据持久操作都无需开发人员手动编写 SQL 语句, 直接调用方法就可以轻松的实现 CRUD 操作.

1.1 MongoDB 的特点

  • 高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++ 语言的驱动程序,社区中也提供了对 Erlang 及. NET 等平台的驱动程序。
  • 文件存储格式为 BSON(一种 JSON 的扩展)。
  • 可通过网络访问。

1.2 MongoDB 的功能

  • 面向集合的存储:适合存储对象及 JSON 形式的数据。
  • 动态查询:Mongo 支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。Mongo 的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:Mongo 包含一个监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:Mongo 数据库支持服务器之间的数据复制,支持主 - 从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

1.3 MongoDB 的适用场景

  • 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由 Mongo 搭建的持久化缓存层可以避免下层的数据源 过载。
  • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  • 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对 MapReduce 引擎的内置支持。
  • 用于对象及 JSON 数据的存储:Mongo 的 BSON 数据格式非常适合文档化格式的存储及查询。

2 Redis、MongoDB 对比

mongodb 和 memcached 不是一个范畴内的东西。mongodb 是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据。和 memcached 更为接近的是 Redis。它们都是内存型数据库,数据保存在内存中,通过 tcp 直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。

MongoDB和Redis都是NoSQL,采用结构型数据存储。二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同。MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。

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

2.1 性能

Redis大于 mongodb。

2.2 操作的便利性

  • Redis 丰富一些,数据操作方面,Redis 更好一些,较少的网络 IO 次数。
  • mongodb 支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。

2.3 内存空间的大小和数据量的大小

  • Redis 在 2.0 版本后增加了自己的 VM 特性,突破物理内存的限制;可以对key value 设置过期时间(类似 memcache)。
  • mongoDB 适合大数据量的存储,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务不要和别的服务在一起。

2.4 可用性(单点问题)

  • Redis 对于单点问题,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照, 无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动 sharding, 需要依赖程序设定一致 hash 机制。一种替代方案是,不用 Redis 本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡。
  • mongoDB 支持 master-slave,replicaset(内部采用 paxos 选举算法,自动故障恢复),auto sharding 机制,对客户端屏蔽了故障转移和切分机制。

2.5 可靠性(持久化)

  • 对于数据持久化和数据恢复,Redis 支持(快照、AOF):依赖快照进行持久化,aof 增强了可靠性的同时,对性能有所影响。
  • MongoDB 从 1.8 版本开始采用 binlog 方式支持持久化的可靠性。

2.6 数据一致性(事务支持)

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

2.7 数据分析

mongoDB 内置了数据分析的功能 (mapreduce), 其他不支持。

2.8 应用场景

  • Redis:数据量较小的更性能操作和运算上。
  • MongoDB: 主要解决海量数据的访问效率问题。
支持情况 一般 极好
数据规模 redis ES Mongo HBase
查询性能 HBase ES Mongo redis
写入性能 ES Mongo HBase redis
复杂查询、检索功能 redis HBase Mongo ES

猜你喜欢

转载自blog.csdn.net/An1090239782/article/details/129668987
今日推荐