大数据量统计

最近在做一个统计项目的改造,对两张日志表进行分析统计,最后形成报表。这两张日志表现在每天的数据量在1亿左右,大小在30G左右,对我有用的数据大概为20G。因为这量个日志是成上升趋势的,所以我设计出来的系统应该能应对每张表2亿的数据量。

之前的做法是用了3台节点机,1台主控机,来进行统计。节点机分id段分别统计(比如node1统计id为1-5千万,node2统计5千万-1亿,1亿到1.5亿,这些都是可以配置的,并且如果数据量超过1.5亿,增加一台机器再配置一下就ok了),最后由主控机完成汇总。改造原因无非是代码很乱,出错不断,统计很耗内存等。

仔细的分析了一下需求,其实逻辑不复杂,基本就是根据不同的字段来分段,去重,count等,这样的数据量显然不能直接用sql去group by,count什么的。我想起之前看过berkeley db的一些知识,berkeley db的本地文件数据库以及它的大吞吐量,很适合这个场景。

我的做法:两张日志表可以在spring中起两个job,分段读取(可以每次读50W的),每次读取到数据后把数据分给不同的handler去处理相应统计,统计的临时数据记入bdb,数据读取完毕后再分别汇总各自的数据,存入数据库。为了防止意外情况,对于月统计的临时数据入数据库。bdb的数据每天统计完了清理掉。

这样做的好处:
1.减少读写数据库的频率,我们的数据库是很多应用共用,频繁的读取数据库会对其他应用有影响。
2.充分利用本地硬盘,能够避免oom的情况。
3.还没有测试过,不过个人认为一台机器8G的内存应该就可以搞定,这样就节省了3台机器。
4.在想……

本人水平有限,欢迎有经验的同学提出宝贵意见。谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值