每天百万到千万级的数据流水,做汇总和数据可视化图表,后台应该如何做技术选型?

高龄购物车驾驶员 发布于 10/09 09:56
阅读 2K+
收藏 4

每秒大概实时数据几千上万条汇入,需要对数据做分析和汇总之后在前端做数据可视化展示,统计跨度包括过去两小时,上一天,上一周,一个月,原始数据只做分析不修改,后台技术方案如何选型?

我个人目前想的是,数据接入用mq做削峰,每天用定时任务生成上一天的汇总数据,当天的数据放redis实时分析,原始数据存储放mongodb,太久之前的数据从mongo移到文件存储中。

是否有更好的方案?这种场景适合用ES吗?

加载中
4
狐狸糊涂
狐狸糊涂

按照内容描述姑且算作1w/s,每个小时需要处理的数据量就是3600w/hour,和你标题提到的每天的数量级不一样,不知道以那个为准。每天千万级和每小时千万级差别还是挺大的。

另外,还需要从以下几个方面考虑你的需求(供参考):

  • Broker选型:RabbitMQ或者kafka,如果只是数据的relay的话建议kafka,kafka也有很多开源的connector可以直接无缝集成多种数据库,开发成本相对会低很多。RabbitMQ了解相对较少,不知道是否也有类似的组件可以使用,需要调研。
  • 计算引擎: 数据是否需要重新计算和做就聚合 (是的话就需要一个计算引擎来做数据的计算,可以考虑流式计算引擎或者定时任务处理,实时性要求高的话就须用流式计算。)
  •  数据存储:redis和mongodb不适合做分析性的查询,需要有一个适合数据分析的数据库来支撑,把一些查询结果缓存到redis倒是可行。我们有类似的产品用的是memsql,不过商业版需要授权。你可以看看HTAP的数据库有哪些适合你的应用场景的,再筛选。 PS,不建议轻易上hadoop系列的数据库(hive,hbase等),维护成本比较高,除非你们有专业的维护团队,否则就会非常折腾。
k
kingMH
回复 @高龄购物车驾驶员 : 1、es 虽有聚合汇总功能,但主要优势是分词搜索,感觉不太合适你的场景;2、“过去两小时”和“每天,每周,每月”这些需求同时满足,传统定时任务很难胜任,用流式计算引擎吧
高龄购物车驾驶员
高龄购物车驾驶员
数量级不会太大,每天总量大概几千万,有些时候也可能一小时1千万。数据存储其实问题不大,因为历史数据只需要计算出汇总结果就好了,大概每10分钟一次汇总。 我犹豫的是当天的数据要如何实时计算,主要是做多维度的聚合汇总的计算,比如根据时间,地域,年龄等,用spark streaming还是ES更好? 或者是时序数据库更适合?
2
木九天
木九天

clickhouse比es查询效率高百倍以上,字节在用,以供参考

1
ZeroneLove
ZeroneLove

influxDB时间序列数据,直接解决高并发写场景,特别适合按时间访问统计的场景

ZeroneLove
ZeroneLove
回复 @高龄购物车驾驶员 : 大数据可视化无非就是各种统计,简单统计用时序数据库是可以的,复杂非实时hive,实时流式计算吧:smile:
高龄购物车驾驶员
高龄购物车驾驶员
谢谢,我对时序数据库不是很了解,只听说过。想看看业界有没有其他做过大数据可视化的技术方案
0
f6666
f6666

这个时候应该使用大数据流式计算比如flink,spack

0
ddatsh
ddatsh

tidb解决一切烦恼

0
liming0101
liming0101

mongo移到文件存储 ?

分布式数据库不香吗

高龄购物车驾驶员
高龄购物车驾驶员
因为历史数据计算完成之后就没有太大的意义,之后使用都是根据计算结果来使用,原始数据只需要存储起来就可以,量太大存文件就行了,不需要占用数据库资源
0
君千殇520
君千殇520

1.每天凌晨定时跑前一天的数据,统计到维度 小时,然后存到数据库

2.查询报表,查询历史,从数据库直接取,小时维度,很方便可以查询到天,周,月,数据量也不会大

3.当天数据,实时统计,放缓存。。。。另外可以在项目运行的时候就统计当天的存到缓存.

0
f
freezingsky

同时做多个粒度的数据累积,比如,按小时,按天,按周,按月,按季度,按年度。后者可以基于前者累计得到。正常应该是这么做的。

0
不会飞的小龙人

如果统计当天的实时数据,可以考虑上大数据流处理引擎Flink,专门针对实时数据流做聚合处理;

0
返回顶部
顶部