0

我有一个在 OpenWRT 路由器上运行的小程序,它记录到远程 MySQL 数据库。如果数据库变得不可用,程序会写入缓冲区文件 (/var/buffer) 以防止数据丢失。问题是,由于它存储在路由器本身上,如果数据库停机时间过长,很有可能很快就会用完空间。

我想如果我将文件保持在最多 20,000 行,在写入新的时丢弃最旧的(一旦达到最大大小),我可以最大限度地减少数据丢失,而不必担心存储空间不足空间(有点损失不是世界末日,我宁愿保留最新的东西而不是最旧的东西)。

根据我的研究,我了解到如果不重写整个文件(不好,太耗时)就无法删除文件的第一行,并且每次我认为我接近另一个解决方案时它都会崩溃。

有没有更好的办法?还是每次我有一个新行来添加我唯一的选项时都重新编写 20k 行文件?

4

1 回答 1

1

您可以有一个log_LastLineNo变量,它将存储在那一刻写入日志的最后一行的行号(第一次,一开始它将是0)。

继续写入文件,直到写完 20,000 行,然后继续更新log_LastLineNo.
之后从头开始覆盖文件,并设置一个变量log_full = 1

现在
案例 1: log_full = 0 &log_LastLineNo = [some value < 20000]
在这种情况下,从开始读取直到log_LastLineNo

案例 2: log_full = 1 &log_LastLineNo = [some value < 20000]
在这种情况下,从log_LastLineNo + 1直到第 20000 行开始读取,然后从开始读取到log_LastLineNo.

于 2013-10-25T17:25:28.990 回答