目前須要存入spark的運算結果數據,對查詢速度要求又比較高,所以選擇了幾種分佈式數據庫HBase,MongoDB,ElasticSearch
分別從寫入速度,查詢速度和磁盤佔用進行比較。數據庫
以前把結果存在了postgre裏,採用了分表的方法,可是查詢一次耗時1分半鐘,沒法接受...markdown
寫入速度分佈式
寫入1年數據post
Hbase:10分鐘
MongoDB:17分鐘
ES:8分鐘
複製代碼
查詢速度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秒左右進程
磁盤佔用內存
Hbase:
32年數據:36.1 G
MongoDB:
32年數據:120g
ES:
32年數據:110.9 GB
複製代碼
總結
Hbase適合比較大的數據量,簡單的查詢條件,Hbase基本只能根據RowKey進行Get或Scan,或者利用二級索引查詢少許數據,若是二級索引查詢出來的數據量太大,再回Hbase查詢速度也很慢
MongoDB能支持比Hbase更復雜的查詢,適合schema不肯定的場景,另外當數據量達到幾千萬後2個MongoDB的進程佔用了了30G的內存……
ElasticSearch適合全文檢索,只存查詢用到的字段。如Hbase的二級索引能夠用ES實現,將真正的數據存在Hbase中,若是須要較快的查詢速度須要大內存的支持,比較耗資源
因爲目前咱們的數據查詢場景只有兩種,對速度要求又比較高,最終我採用了存兩份HBase數據(共佔70g),一份根據經緯度查詢,一份用來根據時間查詢,兩種查詢都保持在1秒左右