日千万级记录的 OLAP,大家用 MySQL 还是 Druid.io 还是有其他好东西?

2017-05-29 17:31:45 +08:00
 binjjam
有个日志埋点接收服务,每天大概有 1500W 的请求,需要每 5 分钟进行一些聚合,原始数据大概是 16 个维度,然后取出其中的 5 个左右进行单独聚合。之前使用的是 Percona 的 MySQL 5.5,MyISAM 引擎按天进行表分区,由于每 5 分钟只聚合该 5 分钟内的数据,所以数据量也不多,统计不会有什么问题。
然后有个老哥提出,需要每 5 分钟统计一次当天 0 点到统计时刻的情况,其实就是把原先 5 分钟内的数据统计扩大到 5 分钟到一整天 这样的一个情况,大致相当于到了每天的 20 点后,数据量都是比较大的,然后用 MySQL 的问题就体现出来了,group by 的时候会等很久,大概有个 2 分钟以上,因为统计的任务比较多,导致无法再 5 分钟内进行完所有统计。
于是就进行了各种调研,发现有个叫 Druid.io 的玩意专门用来玩实时 OLAP 的,不过鄙人测试了下,并没有快到哪里去,一方面是因为 queryGranularity 我是按秒的,另外一方面可能是我的服务器不行( Intel(R) Xeon(R) CPU X5650 @ 2.67GHz 64G RAM ) 。
最近我又搞了个 10.2.6-MariaDB,相同的配置下,比 Percona 的要稍快一点,但是依旧无法避免这个需要聚合千万条数据的问题。之前也测试过 InfoBright,由于我那些列基本上都是每行全满的,用了 brighthouse 发现并没有比原先的 MyISAM 快多少,所以就放弃这个了。
不知道各位大侠在这方面是怎么做的?像 bugly 那种那么多数据不知道怎么统计才比较快?
6038 次点击
所在节点    问与答
11 条回复
misaka19000
2017-05-29 17:35:11 +08:00
ELK ?
binjjam
2017-05-29 18:14:12 +08:00
@misaka19000 ELK 在聚合方面也比较抓鸡
billlee
2017-05-29 18:19:46 +08:00
程序逻辑能不能改进?比如聚合 0 - 10 分钟的数据的时候,能否复用 0-5 分钟的聚合结果?
hellommd
2017-05-29 18:33:10 +08:00
把每 5 分钟的结果聚合在一起?
binjjam
2017-05-29 19:09:16 +08:00
@billlee 之前尝试过放在 redis 里面,是可以做到这点的,就是原始日志入库的时候都丢那些需要统计的到 redis 里,然后到点再从 redis 里取出来,因为统计可能不够及时,没办法直接一天放一个 set (不然可能进去的结果已经是包含了下个 5 分钟的数据了),当时搞的是 5 分钟 1 个 key,然后取并集的做法,不够需要维护很多很多 key 呢,比较麻烦~
可能我这个套路不科学
binjjam
2017-05-29 19:10:16 +08:00
@hellommd 去重统计的话,一天内每个 5 分钟的结果加起来并不是这一天的总去重结果呢
mkstring
2017-05-29 19:50:06 +08:00
为啥不用 hive
ihuotui
2017-05-29 19:50:18 +08:00
应该尝试流式计算,基于静态数据再统计这种方式 实时性不好
binjjam
2017-05-29 20:15:54 +08:00
@ihuotui 流式计算老哥能指点一二么,druid.io 这个也算是流..数据从 kafka 到 druid.io 然后再自己去拿结果。
billlee
2017-05-29 20:46:49 +08:00
@binjjam #5 你既然是从 kafka 取数据的,为什么会控制不好时间区间呢? Kafka 里面的消息都有 timestamp 的啊
binjjam
2017-05-29 21:09:45 +08:00
@billlee kafka 实时被 druid.io 消费了哇...原始数据流只有一份,
00:05 统计 00:00:00~00:04:59 的数据,
00:10 统计 00:00:00~00:09:59 的数据,
...
第二天 00:00 统计前一天 00:00:00~23:59:59 的数据

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/364608

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX