MongoDB、ElasitcSearch、Redis、HBase是现今最火的四款NoSQL数据库产品。在实际的开发中,这四种数据库有什么区别?我到底该选哪个?想必这是很多互联网开发都遇到过的难题。下面就给大家总结下这四种数据库产品的特点和应用场景,希望能够帮助你更深刻的理解这四种数据库的特点,好帮助你作出正确的数据库选择。
一、Redis
Redis的优点:
读写性能优异;
支持数据持久化,支持AOF和RDB两种持久化方式;
支持主从复制,主机会自动将数据同步到从机,可以进行读写分;
数据结构丰富:除了支持string类型的value外还支持string、hash、set、sortedset、list等数据结构。
Redis的局限性:
Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)。
支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点。
Redis在String类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用。
总结:
缓存的时候选择
二、MongoDB
MongoDB的优点:
无模式;
查询与索引方式灵活,是最像SQL的Nosql;
支持复制集、主备、互为主备、自动分片等特性。
Mongodb的缺点:
在集群分片中的数据分布不均匀;
单机可靠性比较差;
大数据量持续插入,写入性能有较大波动;
磁盘空间占用比较大。
总结:
对数据库字段经常有变化时选择。
三、HBase
HBase 优点:
存储容量大,一个表可以容纳上亿行,上百万列;
可通过版本进行检索,能搜到所需的历史版本数据;
负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce分布式计算系统);
可有效避免单点故障的发生。
HBase 缺点:
基于Java语言实现及Hadoop架构意味着其API更适用于Java项目;
node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置),缺乏文档;
占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;
API相比其它 NoSql 的相对笨拙。
总结:
超大数据量时选择
四、ElasticSearch
ElasticSearch的优点:
横向可扩展性: 作为大型分布式集群,很容易就能扩展新的服务器到ES集群中;也可运行在单机上作为轻量级搜索引擎使用。
更丰富的功能:与传统关系型数据库相比,ES提供了全文检索、同义词处理、相关度排名、复杂数据分析、海量数据的近实时处理等功能。
分片机制提供更好地分布性: 同一个索引被分为多个分片(Shard),利用分而治之的思想提升处理效率。
高可用: 提供副本(Replica)机制,一个分片可以设置多个副本,即使在某些服务器宕机后,集群仍能正常工作。
开箱即用: 提供简单易用的 API,服务的搭建、部署和使用都很容易操作。
ElasticSearch 的缺点:
最明显的就是字段类型无法修改、在需要添加新数据与新字段的时候,如果elasticSearch进行搜索是可能需要重新修改格式。之前的数据需要重新同步,对数据的管理有很多困难。
写入性能较低和高硬件资源消耗
总结:
MongoDB、ElasticSearch、Redis、HBase,以上四种数据库是当今NoSQL中最火爆的几款,掌握了它们,你基本就能HOLD住互联网开发中的绝大多数数据存储需求。这里还想强调的一点是,如同买衣服一样,没有最好的数据库,只有最适合你的应用场景的数据库,因此选用一款数据库前一定要想清楚自己的应用场景是否合适。再给大家总结下这些数据库的适用场景:
如果你对数据的读写要求极高,并且你的数据规模不大,也不需要长期存储,选redis;
如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,选MongoDB;
如果你需要构造一个搜索引擎或者你想搞一个看着高大上的数据可视化平台,并且你的数据有一定的分析价值或者你的老板是土豪,选ElasticSearch;
如果你需要存储海量数据,连你自己都不知道你的数据规模将来会增长多么大,比如大型电商(京东、天猫)的历史订单,每天都产生千万级量,那么就选HBase。
四种NOSQL对比图如下所示: