ES, MongoDB, HBase的区别和使用场景

原文网址:ES, MongoDB, HBase的区别和使用场景_IT利刃出鞘的博客-CSDN博客

简介

说明

        本文介绍技术选型:ES, MongoDB, HBase的区别和使用场景。

简要对比

支持情况

很差

一般

最好

数据规模

Redis

ES

MongoDB

Hbase

查询性能

Hbase

ES

MongoDB

Redis

写入性能

ES

MongoDB

Hbase

Redis

复杂查询&检索

Redis

Hbase

MongoDB

ES

ES

ES是个搜索引擎,严格来说不是个数据库。

优点

  1. 支持全文搜索
  2. 可以自动建立索引
  3. 复杂查询性能很高

缺点

  1. 字段类型无法修改
  2. 不支持mapReduce
  3. 写入性能较低、硬件资源消耗高
  4. 没有细致的权限管理
            也就是说,没有像mysql那样的分各种用户,每个用户又有不同的权限。所以在操作上的限制需要自己开发一个系统化来完成。
  5. 各节点数据的一致性问题
            默认的机制是通过多播机制,同步元数据信息,但是在比较繁忙的集群中,可能会由于网络的阻塞,或者节点处理能力达到饱和,导致各数据节点数据不一致——也就是所谓的脑裂问题,这样会使得集群处于不一致状态。目前并没有一个彻底的方案来解决这个问题,但是可以通过参数配置和节点角色配置来缓解这种情况。

使用场景

适用于需要复杂的搜索的场景。例如:

  1. 日志分析
    1. 将日志统一存储,进行管理和查询。
  2. 全文索引
    1. 电商商品搜索、移动应用搜索、企业内部信息搜索等
  3. 商业智能 BI
    1. 电子商务、移动应用、广告媒体等业务,进行数据分析和数据挖掘来辅助商业决策。

见:Elasticsearch Service 应用场景-产品简介-文档中心-腾讯云

MongoDB

优点

  1. 最大的特点是表结构灵活可变,字段类型可以随时修改。
  2. 插入数据时,不必考虑表结构的限制。
  3. 支持mapReduce
            Map-Reduce是一种计算模型,将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。

缺点

  1. 对多表查询的支持不好
  2. 没有细致的权限管理
            也就是说,没有像mysql那样的分各种用户,每个用户又有不同的权限。所以在操作上的限制需要自己开发一个系统化来完成。

使用场景

  1. 网站实时数据:实时的插入,更新与查询,并具备网站实时数据存储所需的复制及伸缩性。
  2. 数据缓存:信息基础设施的缓存层。MongoDB 持久化缓存层可避免下层的数据源过载。
  3. 大尺寸、低价值数据存储
  4. 高伸缩性场景:由数十或数百台服务器组成的数据库。MongoDB 的路线图中已经包含对 MapReduce 引擎的内置支持。
  5. 对象或 JSON 数据存储:BSON 数据格式非常适合文档化格式的存储及查询。

HBase

优点

  1. 支持海量数据
    1. 使用廉价的PC机就能够搭建起海量数据处理的大数据集群
    2. 继承了hadoop项目的优点,适合对海量数据的支持
    3. 传统关系型数据库单表不会超过五百万,超过要做分表分库,不会超过30列。
    4. Hbase单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数据量级都非常具有弹性。
  2. 高扩展性(横向扩展)
    1. 底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加datanode节点服务(机器)就可以了。
  3. 高可靠性
    1. WAL机制,保证数据写入的时候不会因为集群异常而导致写入数据丢失。
    2. Replication机制,保证了在集群出现严重的问题时候,数据不会发生丢失或者损坏。
    3. Hbase底层使用HDFS,本身也有备份。
  4. 高性能
    1. 底层的LSM数据结构和RowKey有序排列等架构上的独特设计,使得Hbase写入性能非常高。

    2. Region切分、主键索引、缓存机制使得Hbase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能够到达毫秒级别。
    3. LSM树,树形结构,最末端的子节点是以内存的方式进行存储的,内存中的小树会flush到磁盘中(当子节点达到一定阈值以后,会放到磁盘中,且存入的过程会进行实时merge成一个主节点,然后磁盘中的树定期会做merge操作,合并成一棵大树,以优化读性能。)
  5. 列操作
    1. HBase是面向列的存储和权限控制,并支持独立检索,可以动态增加列。可单独对列进行各方面的操作列式存储,其数据在表中是按照某列存储的,在查询只需少数几个字段时,能大大减少读取的数量。

缺点

  1. 不支持复杂查询,如条件查询
    1. 只支持按照row key来查询
  2. 容易产生单点故障(在只使用一个HMaster的时候)
    1. HA 的master 可以避免
  3. 不支持事务
  4. 不支持JOIN,需要用MapReduce
  5. 只能在主键上索引和排序
  6. 没有内置的身份和权限认证,需要外部支持
  7. HBase是很重的一款产品,需要依赖很多的Hadoop组件
    1. 因此如果你的数据规模不大,MongoDB这类产品完全可以更好的满足你的需求。

使用场景

  1. 写密集型应用,每天写入量巨大(上千万或者上亿行,每日 TB 以上数据量),而相对读数量较小的应用
    1. 比如游戏的日志,DNS信息等
  2. 不需要复杂查询条件来查询数据的应用
    1. HBase只支持基于rowkey的查询,对于HBase来说,单条记录或者小范围的查询是可以接受的,大范围的查询由于分布式的原因,可能在性能上有点影响,而对于像SQL的join等查询,HBase无法支持。
  3. 对性能和可靠性要求非常高的应用
    1. HBase本身没有单点故障,可用性非常高。

如何选型

  • MongoDB
    • 如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,选MongoDB;
  • ES
    • 如果你需要构造一个搜索引擎或者你想搞一个看着高大上的数据可视化平台,并且你的数据有一定的分析价值或者你的老板是土豪,选ElasticSearch;
  • HBase
    • 如果你需要存储海量数据,连你自己都不知道你的数据规模将来会增长多么大,那么选HBase。

猜你喜欢

转载自blog.csdn.net/feiying0canglang/article/details/125896003