redis和mongodb区别有哪些框架

by 深夜里写琴弹代码的人

mongodb:我觉得定位是取代关系型数据库,想当一个主流数据库。因为他有非结构化、方便扩充字段、写性能优于mysql。万事万物有利有弊,mongodb的内存型缓存内容,让其速度飞快,带来内存率多,掉电数据问题等,加上自身代码还有很多bug带来不如老牌关系型数据库稳定,特别是在主从等分布式环境,其设计也带来诸多问题。 redis:是一个小而美的数据库,主要用在key-value 的内存缓存,读写性能极佳,list,set,hash等几种简单结构使得使用也很简单。缓存与简单是其定位,分布式redis架构的出现,让redis更加广泛的使用,稳坐缓存第一把交椅。 hbase:定位非结构化大数据,可伸缩性好,并不是完全高可用,底层依靠hadoop提供的HDFS,使用时有一整套zookeeper,pig,hive的生态系统。Cassandra可以算一个竞争对手,但Cassandra去中心化的自适应结构又跟Hbase中心化的生态系统完全不同。

//下面主要总结区别和特点

特别适用于简单数据写入(如“消息类”应用)和海量、结构简单数据的查询(如“详单类”应用)。特别地,适合稀疏表。(个人觉得存个网页内容是极好极好的)
作为MapReduce的后台数据源,以支撑离线分析型应用。

场景:Facebook的消息类应用,包括Messages、Chats、Emails和SMS系统,用的都是HBase;淘宝的WEB版阿里旺旺,后台是HBase;小米的米聊用的也是HBase;移动某省公司的手机详单查询系统。(单次分析,只能scan全表或者一个范围内的) 4.MongoDB

是一个介于关系型和非关系型之间的一个产品吧,类SQL语言,支持索引
MongoDb在类SQL语句操作方面目前比HBase具备更多一些优势,有二级索引,支持相比于HBase更复杂的集合查找等。
BSON的数据结构使得处理文档型数据更为直接。支持复杂的数据结构
Redis很适合用来做缓存,但除此之外,它实际上还可以在一些“读写分离”的场景下作为“读库”来用,特别是用来存放Hadoop或Spark的分析结果。
Redis的读写性能在100,000 ops/s左右,时延一般为10~70微妙左右;而HBase的单机读写性能一般不会超过1,000ops/s,时延则在1~5毫秒之间。
Redis的魅力还在于它不像HBase只支持简单的字符串,他还支持集合set,有序集合zset和哈希hash

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

NoSQL数据库的四大分类

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。[3]举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。[2]如:Neo4J, InfoGrid, Infinite Graph.

因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。

NoSQL数据库的四大分类表格分析
以列簇式存储,将同一列数据存在一起
查找速度快,可扩展性强,更容易进行分布式扩展
Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)
数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
查询性能不高,而且缺乏统一的查询语法。
社交网络,推荐系统等。专注于构建关系图谱
利用图结构相关算法。比如最短路径寻址,N度关系查找等
很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。[3]

两个概念,后端管理使用多些的话,建议还是用关系型数据库

如果是用在前端些的应用,用nosql更好。(其实有了缓存哪都一样,看自己对哪个数据库熟悉点了)

 MongoDB和Redis都是NoSQL,采用结构型数据存储。二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同。

 MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。

BSON,自定义二进制
依赖内存,TPS非常高
丰富的数据表达,索引;最类似于关系型数据库,支持丰富的查询语句
适合大数据量存储,依赖系统虚拟内存,采用镜像文件存储;内存占用率比较高,官方建议独立部署在64位系统 Redis2.0后支持虚拟内存特性(VM) 突破物理内存限制;数据可以设置时效性,类似于memcache 不同的应用场景,各有千秋
依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制;不支持auto sharding,需要依赖程序设定一致性hash机制
依赖快照进行持久化;AOF增强可靠性;增强性的同时,影响访问性能
不支持事务,靠客户端保证 支持事务,比较脆,仅能保证事务中的操作按顺序执行
海量数据的访问效率提升 较小数据量的性能和运算

我要回帖

更多关于 redis和mongodb区别 的文章

 

随机推荐