高手帮忙:看一个设计的问题。

高手帮忙:看一个设计的问题。

目前有一个应用系统,大概每天一个日志文件在200-300M,500-600万条这样。
现在要写一个log的程序,将记录放入mysql数据库中。

问题:
现在log文件小的话可以一次性读入,然后写数据库
文件太大一次读入会消耗大量的内存,这样能不能分段读,然后分段写入数据库。
但是如果这中间出现异常,数据库中存入一部分数据,剩下的怎么办?
能不能设一个标记,让程序下次运行的时候从标记处开始读log文件?
或者让mysql在所有数据插入后在一起提交?
我觉得可以使用下面的笨方法试试:
1,使用BDB缓存日志(就是字典)
2,做一日志服务(线程),逐条处理BDB写入MYSQL,处理一条删除一条BDB记录。

可以测试一下,运行过程中拔一下电源,启动后再运行看是不是从断电时的记录开始工作。
祝好运!
你可以按行读取文件,然后加一个变量,比如i
行++,i++
当i到500时候,你拼一个插入的sql语句。然后来一次提交。
如果有异常,捕获的时候打印下行号,下次从该行开始。

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


QUOTE:
原帖由 NoHair 于 2008-12-15 11:16 发表
目前有一个应用系统,大概每天一个日志文件在200-300M,500-600万条这样。
现在要写一个log的程序,将记录放入mysql数据库中。

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

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