HBase,MongoDB,ElasticSearch比较

3,768 阅读2分钟

目前需要存入spark的运算结果数据,对查询速度要求又比较高,因此选择了几种分布式数据库HBase,MongoDB,ElasticSearch分别从写入速度,查询速度和磁盘占用进行比较。

之前把结果存在了postgre里,采用了分表的方法,但是查询一次耗时1分半钟,无法接受...

  1. 写入速度

    写入1年数据

    Hbase:10分钟
    MongoDB:17分钟
    ES:8分钟
    
  2. 查询速度

    根据经纬度查询,查询500次,耗时如下(单位:毫秒)

    Hbase:平均在200-300毫秒,最大值7秒多

    mean      375.526000
    std       973.780084
    min       136.000000
    25%       192.000000
    50%       214.000000
    75%       256.000000
    max      7534.000000
    

    MongoDB:平均在3-4秒,最大值14秒多

    mean      4106.846000
    std       2370.718396
    min       2188.000000
    25%       2597.750000
    50%       2983.500000
    75%       4721.250000
    max      14680.000000
    

    ES:第一次查询速度比较慢,大概40秒,第二次查询3-4秒左右

  3. 磁盘占用

    Hbase:
    32年数据:36.1 G
    MongoDB:
    32年数据:120g
    ES:
    32年数据:110.9 GB
    
  4. 总结

    • Hbase适合比较大的数据量,简单的查询条件,Hbase基本只能根据RowKey进行Get或Scan,或者利用二级索引查询少量数据,如果二级索引查询出来的数据量太大,再回Hbase查询速度也很慢

    • MongoDB能支持比Hbase更复杂的查询,适合schema不确定的场景,另外当数据量达到几千万后2个MongoDB的进程占用了了30G的内存……

    • ElasticSearch适合全文检索,只存查询用到的字段。如Hbase的二级索引可以用ES实现,将真正的数据存在Hbase中,如果需要较快的查询速度需要大内存的支持,比较耗资源

      由于目前我们的数据查询场景只有两种,对速度要求又比较高,最终我采用了存两份HBase数据(共占70g),一份根据经纬度查询,一份用来根据时间查询,两种查询都保持在1秒左右