2013-10-25 46 views
0

我有一個在OpenWRT路由器上運行的小程序,它記錄到遠程MySQL數據庫。如果數據庫變得不可用,程序將寫入緩衝區文件(/ var/buffer)以防止數據丟失。事情是,因爲它存儲在路由器本身,所以如果數據庫停機時間過長,就有可能很快地耗盡空間。限制日誌/緩衝區文件中的行數

我覺得如果我把文件保存到最多20,000行,丟棄最舊的文件(當達到最大文件大小後),我可以最大限度地減少數據丟失,不必擔心用完存儲空間(有點損失不是世界的盡頭,我寧願保留最新的東西,而不是最古老的東西)。

從我的研究中我明白,如果不重寫整個文件(不好,太耗時),文件的第一行不能被刪除,並且每次我認爲我接近另一個解決方案時,它就會崩潰。

有沒有更好的方法?或者每次有新行添加唯一選項時,重新寫入20k行文件?

回答

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

+0

這是我考慮的方法之一。不幸的是,我的程序有機會停止並重新啓動,所以'log_LastLineNo'會丟失。我想我可以把它保存到一個單獨的文件中... –