MongoDB、ElasitcSearch、redis、HBase是现今最火的四款NoSQL数据库产品 。在实际的开发中,这四种数据库有什么区别?我到底该选哪个?想必这是很多互联网开发都遇到过的难题 。下面就给大家总结下这四种数据库产品的特点和应用场景,希望能够帮助你更深刻的理解这四种数据库的特点,好帮助你作出正确的数据库选择 。
一、Redis

文章插图
Redis的优点:
- 读写性能优异;
- 支持数据持久化,支持AOF和RDB两种持久化方式;
- 支持主从复制,主机会自动将数据同步到从机,可以进行读写分;
- 数据结构丰富:除了支持string类型的value外还支持string、hash、set、sortedset、list等数据结构 。
- Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右) 。
- 支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点 。
- Redis在String类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用 。

文章插图
MongoDB的优点:
- 无模式;
- 查询与索引方式灵活,是最像SQL的Nosql;
- 支持复制集、主备、互为主备、自动分片等特性 。
- 在集群分片中的数据分布不均匀;
- 单机可靠性比较差;
- 大数据量持续插入,写入性能有较大波动;
- 磁盘空间占用比较大 。

文章插图
HBase 优点:
- 存储容量大,一个表可以容纳上亿行,上百万列;
- 可通过版本进行检索,能搜到所需的历史版本数据;
- 负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce分布式计算系统);
- 可有效避免单点故障的发生 。
- 基于JAVA语言实现及Hadoop架构意味着其API更适用于Java项目;
- node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置),缺乏文档;
- 占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;
- API相比其它 NoSql 的相对笨拙 。

文章插图
ElasticSearch的优点:
- 横向可扩展性: 作为大型分布式集群,很容易就能扩展新的服务器到ES集群中;也可运行在单机上作为轻量级搜索引擎使用 。
- 更丰富的功能:与传统关系型数据库相比,ES提供了全文检索、同义词处理、相关度排名、复杂数据分析、海量数据的近实时处理等功能 。
- 分片机制提供更好地分布性: 同一个索引被分为多个分片(Shard),利用分而治之的思想提升处理效率 。
- 高可用: 提供副本(Replica)机制,一个分片可以设置多个副本,即使在某些服务器宕机后,集群仍能正常工作 。
- 开箱即用: 提供简单易用的 API,服务的搭建、部署和使用都很容易操作 。
- 最明显的就是字段类型无法修改、在需要添加新数据与新字段的时候,如果elasticSearch进行搜索是可能需要重新修改格式 。之前的数据需要重新同步,对数据的管理有很多困难 。
- 写入性能较低和高硬件资源消耗
MongoDB、ElasticSearch、Redis、HBase,以上四种数据库是当今NoSQL中最火爆的几款,掌握了它们,你基本就能HOLD住互联网开发中的绝大多数数据存储需求 。这里还想强调的一点是,如同买衣服一样,没有最好的数据库,只有最适合你的应用场景的数据库,因此选用一款数据库前一定要想清楚自己的应用场景是否合适 。再给大家总结下这些数据库的适用场景:
- 如果你对数据的读写要求极高,并且你的数据规模不大,也不需要长期存储,选redis;
- 如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,选MongoDB;
推荐阅读
- Nginx 的这些妙用,你都 get 到了吗?
- 排名前20位最受欢迎的黑客工具
- 如何成为百度搜索的精选摘要?
- 9层妖塔在青海哪个地方? 青海的九层妖塔
- docker基础篇-安装
- 性取向的分类 什么叫第四性取向
- 我的网站真的需要云负载均衡器吗?
- 16种编程语言是如何命名的?
- 中国文化中的茶影像概说
- 武夷山吴屯妇女的喝茶习俗概说
