我有一个每隔几分钟写一个日志文件。我将有一个将侦听特定目录的进程。它每小时都会将此csv文件中的新行导入访问数据库。不幸的是,csv文件没有每行的唯一键。
问题是我应该如何跟踪要导入的新行?
如何知道何时导入新行?
另一个复杂因素是有另一个程序每天删除一次这个csv文件,所以我无法准确跟踪我中断的位置。
答案 0 :(得分:2)
日志文件自然应该有时间戳。您可以按上次加载的日志日期时间戳进行跟踪。
如果您没有要跟踪的日期时间或任何其他顺序属性,则可以在每次加载后跟踪文件长度。因此,在您下次阅读之前,您将当前文件流阅读器位置设置为上一次检查时捕获的文件长度值。
<强> [编辑] 强>
关于你添加的关于“另一个复杂性”的评论,还有另一个程序每天删除一次这个csv文件:
答案 1 :(得分:0)
如果日志文件没有唯一键,那么您几乎不会使用行号作为键。 (正如@Alex Aza建议的那样,使用文件流阅读器位置会更有效率,但听起来你有点卡住,所以从行号开始可能会让你去,然后你可以改进它。)
你说你不能使用某个职位,因为该文件将在一夜之间被删除,但你可以将其作为一个特例来处理。如果可用的总行数(或最后一个文件位置)小于您读取的上一个最远位置,则需要返回零。您还应该能够使用文件的创建时间来检测自上次查看以来它是否已被替换。
答案 2 :(得分:0)
听到它的声音,你应该退后一步 - 你实际记录的是什么?
必须有某事唯一,否则如果记录被插入两次则无关紧要。
回答你的问题: