HBase比较ES,mongodb的优缺点,及各自适应的场景

来源:2-2 HBase数据存储模型及与关系型数据库的区别

前田慶次

2018-05-23

老师你好,我对HBase和elasticsearch,mongodb的使用场景比较模糊,问下它们的优缺点,是否可以结合使用。

谢谢。

写回答

1回答

叁金

2018-05-23

随着各项技术的发展,他们会逐渐利用最新的设计思想去完善自身的功能,有时候会导致不同技术之间的边际模糊化,比如我们也会选择使用ElasticSearch进行存储(比如日志),MongoDB的分片技术同样是利用了MapReduce思想,HBase本身就是一个NoSql数据库等等,但是不同技术之间还是有很大的区别。相对于描述各个技术的优缺点不如我们直接来看一下各个技术对应的应用场景。

ElasticSearch 它的核心就是一个全文搜索引擎,它建立在Lucene之上能够快速的进行查询检索且有丰富的查询语法,可以帮助我们在数百万文档中通过关键词进行定位。如果我们有这种场景的话是可以使用ES的,比如ELK大礼包。但是不同于一个数据库引擎,ES对于复杂的查询和聚合操作并不强,所以需有进行更加复杂的计算或者对数据进行加工就不用考虑ES了。

MongoDB是一个优秀的NoSql数据库,具有高可扩展,自动分片等特性。而且是一个面向文档的数据库,它提供了一个叫做全文索引的东东,让我们可以去检索数据,但是这个性能可想而知。MongoDB作为一个数据库引擎它可以支持聚合,复杂操作计算,MapReduce等等一系列操作,这些我们就不细说了。这个时候看ES和MongoDB的区别应该是蛮大的。 这是MongoDB与ES的区别,与HBase的我们看了HBase之后再谈。

HBase是一个列式NoSQL数据库,首先要声明的是,虽然我们的课程里面用HBase去存储文档,但是HBase本身并不是文档型数据库,它本身就是一个常见的数据库,只不过数据类型只支持二进制,我们可以用它来存储文档,同时也可以存储其他数据,这里切勿因为课程的实战干扰了我们的认知。    所以这里我们根本就没必要跟ES进行对比,两者其实就不是一个东西。  再看跟MongoDB的比较,我们知道HBase基于Hadoop,对于MapReduce支持的更好,而且本身就是分布式通过rowkey进行负载均衡。本身通过rowkey |column family:column qualifier| timestamp 联合定位数据,而且作为列式数据库,column qualifier动态可扩展,所以特别适合非结构化的数据,但是相对于MongoDB它不支持二级索引,检索也只支持rowkey查询,范围查询等等。 mongodb的查询方式就很多了比如集合 正则 范围 还能skip和limit 跟我们常用的关系库感觉很像。 HBase吞吐量比较高,但是比较适合写多读少的情况,写效率优先于读效率。 而MongoDB正好相反,读效率要高于写效率。而且HBase你如果认为它是一个单独的Nosql数据库但是它有在Hadoop的生态体系内。 很多时候我们都是根据需求在Hadoop集群中再搞一套HBase来使用,它本身与mongodb和es并不冲突。而且有很多成熟的工具支持我们将hbase中的数据导入导出到es和其他数据库中。  大概就是这样。

只有我们对于各项技术的适用场景成竹在胸,这样才能作出最好的选择。同时有些场景可能两者都会适应,这个时候就要根据经验和可扩展性等的方面做出最优选择。


0
1
前田慶次
很详细,非常感谢!
2018-05-23
共1条回复

HBase+Spring Boot实战分布式文件存储(OpenTSDB实战升级)

深入浅出讲解HBase,让你轻松处理海量数据

493 学习 · 167 问题

查看课程