HBase/ElasticSearch/Redis/MongoDB对比
Redis/MongoDB对比-HBase">HBase
HBase是一种key/value分布式存储系统,它依赖于zookeeper和HDFS,HDFS:分布式存储系统。
HBase 优点:
1) 存储容量大,一个表可以容纳上亿行,上百万列;
2)可通过版本进行检索,能搜到所需的历史版本数据;
3)负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce分布式计算系统);
4)可有效避免单点故障的发生。
HBase 缺点:
1.基于Java语言实现及Hadoop架构意味着其API更适用于Java项目;
2. node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置),缺乏文档;
3.占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;
4.API相比其它 NoSql 的相对笨拙。
ES(ElasticSearch)
ES偏向于检索、查询、数据分析,适用于OLAP系统。
ES也有很多的短处,最明显的就是字段类型无法修改、写入性能较低和高硬件资源消耗。
ES会自动的替你建立索引,尽管这能给全文搜索以及聚合查询带来很多好处还能替你省了建索引这一麻烦事,但是这个特性也会带来一堆问题。ES需要在创建字段前要预先建立Mapping,Mapping中包含每个字段的类型信息,ES需要根据Mapping为字段建立合适的索引。由于这个Mapping的存在,ES中的字段一但建立就不能再修改类型了。(例如,你建的数据表的某个字段忘了加全文搜索,你想临时加上,但是表已经建好并且已经有很多数据了,这时候该怎么办呢?不好意思,你只能把整个数据表删了再重建一遍!)
Redis
Redis的优点:
1读写性能优异;
2 支持数据持久化,支持AOF和RDB两种持久化方式;
3 支持主从复制,主机会自动将数据同步到从机,可以进行读写分;
4 数据结构丰富:除了支持string类型的value外还支持string、hash、set、sortedset、list等数据结构。
Redis的局限性:
1、Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)。
2、支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点。
3、Redis在String类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用。
MongoDB
MongoDB的优点:
1、无模式;
2、查询与索引方式灵活,是最像SQL的Nosql;
3、支持复制集、主备、互为主备、自动分片等特性。
Mongodb的缺点:
1、在集群分片中的数据分布不均匀;
2、单机可靠性比较差;
3、大数据量持续插入,写入性能有较大波动;
4、磁盘空间占用比较大。
总结:
如果你对数据的读写要求极高,并且你的数据规模不大,也不需要长期存储,选redis;
如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,选MongoDB;
如果你需要构造一个搜索引擎或者你想搞一个看着高大上的数据可视化平台,并且你的数据有一定的分析价值或者你的老板是土豪,选ElasticSearch;
如果你需要存储海量数据,连你自己都不知道你的数据规模将来会增长多么大,那么选HBase。
发表评论