如何把8千多万日志数据入库?---同事的分享[开发篇]

如何把8千多万日志数据入库?---同事的分享[开发篇],第1张

概述平时自己做开发,都是小打小闹,今天同事来了个分享,说他是怎么把8千多万日志数据入库的,瞬间感觉自己太弱爆了。记录一下其所讲的要点,找个时间自己试验一下吧。项目需求:简单的三个字段,r,ggid,show,统计一个r对应的ggid数据,ggid多个之间用'|'分隔,当然,这不重要。重要的是,这样的日志文件有1900多个,日志行数是8000w+。下面是解决过程:1、分表 *** 作,建立1024个表;2、开启多进程(16),往数据库中进行导入数据,耗时为12小时;3、原因分析,myisam引擎存储过慢,等表锁时间过长。4、改变存储引擎,使用innodb进行储存,速度是变得非常快了(约两小时),但是数据完成不正确,因为innodb当发生表数据重复时,直接抛弃该数据的 *** 作,因此,不行。5、使用glob()避免表锁竞争,每隔1小时重新开启16个进程,运行数据入库;6、使用linux中的内存目录,/dev/shm/ 提升存取速度,由此得到的结果是约两小时,如此看来,确实挺牛的。7、使用fgetscsv,fputcsv时,注意‘“号的情况! 有好些东西,没有自己去实践过,终究纸上得来终学浅,有空就去试验一下吧。 一个好的开发人员,应该既是开发,更是测试,也是产品,天下大事,必成于细,却要你通所有的技能。

    平时自己做开发,都是小打小闹,今天同事来了个分享,说他是怎么把8千多万日志数据入库的,瞬间感觉自己太弱爆了。记录一下其所讲的要点,找个时间自己试验一下吧。

    项目需求:简单的三个字段,r,ggID,show,统计一个r对应的ggID数据,ggID多个之间用'|'分隔,当然,这不重要。重要的是,这样的日志文件有1900多个,日志行数是8000w+。下面是解决过程:

    1、分表 *** 作,建立1024个表;

    2、开启多进程(16),往数据库中进行导入数据,耗时为12小时;

    3、原因分析,myisam引擎存储过慢,等表锁时间过长。

    4、改变存储引擎,使用innodb进行储存,速度是变得非常快了(约两小时),但是数据完成不正确,因为innodb当发生表数据重复时,直接抛弃该数据的 *** 作,因此,不行。

    5、使用glob()避免表锁竞争,每隔1小时重新开启16个进程,运行数据入库;

    6、使用linux中的内存目录,/dev/shm/ 提升存取速度,由此得到的结果是约两小时,如此看来,确实挺牛的。

    7、使用fgetscsv,fputcsv时,注意‘“号的情况!

    有好些东西,没有自己去实践过,终究纸上得来终学浅,有空就去试验一下吧。

    一个好的开发人员,应该既是开发,更是测试,也是产品,天下大事,必成于细,却要你通所有的技能。

总结

以上是内存溢出为你收集整理的如何把8千多万日志数据入库?---同事的分享[开发篇]全部内容,希望文章能够帮你解决如何把8千多万日志数据入库?---同事的分享[开发篇]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1169089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存