前段时间接手一个比较棘手的项目.
6千万的股票行情数据聚合场景.
要求:
用户发起query, 到解析, 再到聚合, 最后展现给用户耗时不超过2秒.
因为聚合维度比较多, 可以划分为时间维度, 指标维度. 指标维度多达10几个.
设想1:
使用mongo, 先扔进去了2千万左右的数据, 不加索引的情况下, 几乎出不了结果.
如果每个维度都使用索引的话成本太高, 最后果断放弃了mongo.
设想2:
使用mysql, 数据分片, 很细粒度的, 准备以空间换时间.
主要是以时间维度做数据冗余, 针对几个主要的时间段, 时间点提前做数据准备.
其他维度采用硬算的方式.
想法是好的, 测试的结果对我来说相当残酷.
1.硬算时间太长.
2.非主要时间维度跨度太细, 不是所有都做数据pre.
设想3:
采用elasticsearch, 准备了5台服务器. 准备采用5台es集群应对OLAP场景.
导进5千万数据后, 开始测试.
时间维度+其他单一维度在1秒以内
时间维度+其他多维度(3个以内)在3秒内
后记
等把项目整理好后会在本文公布项目地址: https://gitee.com/yehun
因公司业务问题, 会阉割掉一些公司保密的项目, 但不会影响到项目.
项目上线后有看了很多OLAP场景的方案.
发现了很多优秀的框架druid, kylin等.
后面如果使用会继续发布OLAP场景的文章!