用python 7分钟处理1.5亿条数据 总结

需求

机器 40核,内存125g,磁盘200g

mysql审计日志 每天静态产生1.6亿条数据,对这些数据进行解析。转换成不重复的sql,汇总到一个文件里面

核心技术点

25g =1.6亿

拆成 25个1个的 1g=800万条数据

对于cpu方面
用多python多进程(25个进程) 把cpu打满,性能用到极限。

对于内存方面
用 mmap (一种内存映射文件的方法) 相当于0拷贝 基本内存没有消耗,消耗比较小

如果用 循环放进list里面 1个1g文件会消耗 2500mb 内存 内存一定会爆,所以采用取一行处理的一行方式

25个1个文件 就对应 25个产生的文件

每读一行 再写入 用追加的方式写入文件

最后用linux把这25个文件汇总
cat 1.sql 2.sql > all.sql

再去重
sort all.sql | uniq > uniq.sql

测试结果 线性增加
2个进程 2分钟
3个进程 2.1分钟
。。。
25个进程 7分钟

主要用 top 在按 1 查看所有cpu的状态,还是内存状态

free -m 查看内存状态

iostat 查看io状态

这次不涉及到 跨网络io 不用查看,可以用warefire查看

执行中 进程使用内存超过linux空闲内存,linux会自动把这个进程killed 会打印出来

所以得注意主要注意cpu,内存的大小

磁盘 df -h 最好 不要超过70% 要不然影响性能

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值