几种数据库对比如下:
redis | mysql | elasticsearch | hbase | hive | |
容量/容量扩展 | 低 | 中 | 大 | 海量 | 海量 |
查询时效性 | 极高 | 中等 | 较高 | 较高 | 低 |
查询灵活性 | 较差 | 非常好 | 较好 | 较差 | 非常好 |
写入速度 | 极快 | 中等 | 较快 | 较快 | 慢 |
一致性、事务 | 弱 | 强 | 弱 | 弱 | 弱 |
redis是基于内存的,所以查询时效性,写入速度非常快,但是扩展性差。基于key-value形式存储,查询的灵活性较差。
mysql也可用来做分布式数据库,不过比较麻烦。支持sql,查询很灵活。查询性能,写入速度都还行,不过支持事务非常好。
elasticsearch由于是分布式的,扩展性能好,查询时效快,写入速度快。不支持sql但是查询还算灵活,不过关联(join)查询较差,一致性、事务也较差。
hbase也是分布式的,支持海量数据,查询时效性也很快,写入速度快,但是依靠rowkey的设计,查询的灵活性很差。
hive是基于hadoop的,所以也支持海量数据,不过任何的操作都需要跑mr的,所以查询以及写入效率很低下,但是对sql的支持是非常棒的。
数据量单日达到TB级别的话还是选择hbase,hive,再根据查询时效性具体选择。当日没有达到TB级别的话es是个很好的选择。redis,mysql并不适合存储海量的数据。结合特性,redis主要还是用作缓存的,mysql还是用于数据量一般,对事务有严格要求的情况,不过支持sql,用来最终数据分析落地展示还是非常合适的。