|
发表于 2008-12-6 23:14:01
|
显示全部楼层
搞两个文件,轮着写,这次写这个,下次写那个。
文件未尾要有一个验证串,用来对上面的数据进行完整性校验,假如文件被破坏,那要么不存在这个串,要么串的校验会发现错误,那这个文件就不能用,用另一个。
断电造成丢失的主要原因还有一个就是磁盘缓存,程序写完了,但其实并没有物理写入到磁盘里。操作系统并不是马上把东西实际写入到磁盘中,也没有固定的时间间隔写入,主要看当前负载,如果IO 多的话,那会以最快速度写入,然后把缓冲区尽量腾空出来给其它IO用。如果当前非常空闲,那也许不会马上写,等多久也不一定,谁也不知道它的算法。。。。也不可能要求用户禁用磁盘的缓存吧,这样会影响机器IO性能。
或者,按我开始说的方法,不但搞两个文件,要多搞几个,反正占不了多少空间。文件越多,某文件距离上次写时间就越长,物理写入的机会就越大。其实有个 3、 5 个文件肯定没问题了。
还有,不必为了吝啬那几分钟的计算时间而把写文件做得太频繁,越频繁就越难保证文件被物理写入。宁愿断电了丢失 0.1% 也没关系,没必要 0.01% 就写一次,因为断电和死机并没有想象中多,真出现的时候,丢10来分钟的计算时间也并不可怕。 |
|