NOSQL之Redis-MongoDB-Hbase的区别和场景
一、NoSQL的简介
NoSQL比关系型数据库性能高数倍。NoSQL凭借 “易扩展、大数据、高可用、高性能、灵活性”特点强势引领全场。CP型分布式数据库,能够保证数据的强一致性和分区容忍性。
二、NoSQL的常用种类
最大区别: mongodb在简单场景下性能高于MySQL的数倍, Redis基本只会用来做缓存,HBase用来做离线计算。
下面,简单介绍下
1> MongoDB(无模式/文档型数据库,“灵活”)
MongoDB是高性能、无模式的文档型数据库,文件存储格式为BSON(二进制格式的JSON),支持二级索引,在事务、复杂查询应用下无法取代关系型数据库。支持相比于HBase更复杂的集合查找。
优点:适合复杂数据格式存储及查询。
缺点:比较消耗内存,有事务、join(全外连接)等短板
适用场景:排行榜,每天刷新一次,remove一次再从db更新过去。
2> Redis(k-v内存数据库,“快”)
Redis是内存亦可持久化的日志型和Key-Value型内存数据库,读写性能最强,提供五种数据类型:String,hash,list,set及zset(sorted set)。适合存储全局变量和高效的分布式缓存。当内存达到一定的阈值,数据可以定时持久化到硬盘中。
优点:
适合读多写少的业务场景,支持操作原子性。
读写性能在100,000 ops/s(operation per second 每秒操作次数)左右,时延一般为10~70微妙左右;而HBase的单机读写性能一般不会超过1,000ops/s,时延则在1~5毫秒之间。
缺点:不支持二级索引。也不适合做存储和分析。处理的数据量要小于HBase与MongoDB。
适用场景:
“读写分离”的场景下作为“读库”用,特别是存放Hadoop或Spark的分析结果。
微信token每两小时刷新一次,就比较适合用redis存储,读也比较方便。
3> Hbase(列数据库,“大”)
HBase列式数据库,BigTable的一种实现。高效存储大量数据,支持列压缩,行事务。适合Schema-less的数据,适合稀疏表,一个表可以容纳上亿行、上百万列,用做超大数据量要求扩展简单的离线分析型应用。Hadoop的无缝集成,有数据可靠性和海量数据分析性能(MapReduce)的能力。
优点:写性能高,适合超高量级写入的场景,适合写多读少的业务场景,可用来存储BI数据及存储大数据。
缺点:不支持二级索引。
适用场景:作为MapReduce(大规模数据集(大于1TB)的并行运算)的后台数据源;Facebook的消息类应用,包括Messages、Chats、Emails和SMS系统,用的都是HBase;淘宝的WEB版阿里旺旺,后台是HBase;小米的米聊用的也是HBase;移动某省公司的手机详单查询系统。(单次分析,只能scan全表或者一个范围内的)