HBase,MongoDB,ElasticSearch比较

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

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

  1. 写入速度分布式

    写入1年数据post

    Hbase:10分钟
    MongoDB:17分钟
    ES:8分钟
    复制代码
  2. 查询速度spa

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

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

    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秒左右

相关文章
相关标签/搜索