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

相關文章
相關標籤/搜索