免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2178 | 回复: 3
打印 上一主题 下一主题

高手帮忙:看一个设计的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-15 11:16 |只看该作者 |倒序浏览
目前有一个应用系统,大概每天一个日志文件在200-300M,500-600万条这样。
现在要写一个log的程序,将记录放入mysql数据库中。

问题:
现在log文件小的话可以一次性读入,然后写数据库
文件太大一次读入会消耗大量的内存,这样能不能分段读,然后分段写入数据库。
但是如果这中间出现异常,数据库中存入一部分数据,剩下的怎么办?
能不能设一个标记,让程序下次运行的时候从标记处开始读log文件?
或者让mysql在所有数据插入后在一起提交?

论坛徽章:
0
2 [报告]
发表于 2008-12-15 12:12 |只看该作者
我觉得可以使用下面的笨方法试试:
1,使用BDB缓存日志(就是字典)
2,做一日志服务(线程),逐条处理BDB写入MYSQL,处理一条删除一条BDB记录。

可以测试一下,运行过程中拔一下电源,启动后再运行看是不是从断电时的记录开始工作。
祝好运!

论坛徽章:
0
3 [报告]
发表于 2008-12-15 13:07 |只看该作者
你可以按行读取文件,然后加一个变量,比如i
行++,i++
当i到500时候,你拼一个插入的sql语句。然后来一次提交。
如果有异常,捕获的时候打印下行号,下次从该行开始。

我这都是读取后打印出一个大的sql文件,然后mysqldump进去。
也是比较笨的方法

论坛徽章:
0
4 [报告]
发表于 2008-12-15 13:35 |只看该作者
原帖由 NoHair 于 2008-12-15 11:16 发表
目前有一个应用系统,大概每天一个日志文件在200-300M,500-600万条这样。
现在要写一个log的程序,将记录放入mysql数据库中。

问题:
现在log文件小的话可以一次性读入,然后写数据库
文件太大一次读入会 ...

可以每次读取1万行,把位置写到一个临时文件里下次程序启动直接seek到临时文件里记得位置。
500多万行作为一个事物提交有点太大了吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP