目前须要存入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秒左右