我有几个事件日志文件(每行一个事件)。日志可能会重叠。日志是在可能来自多个时区的不同客户端计算机上生成的(但我假设我知道时区)。每个事件都有一个时间戳,该时间戳已标准化为公共(public)时间(通过使用适合日志文件的时区实例化每个日志解析器日历实例,然后使用 getTimeInMillis 获取 UTC 时间)。日志已按时间戳排序。多个事件可以同时发生,但绝不是等同的事件。
这些文件可能相对较大,例如单个日志中有 500000 个或更多事件,因此将日志的全部内容读入一个简单的 Event[] 是不可行的。
我正在尝试做的是将每个日志中的事件合并到一个日志中。这有点像合并排序任务,但每个日志都已经排序,我只需要将它们放在一起即可。第二个组成部分是可以在每个单独的日志文件中看到相同的事件,我想在文件输出日志中“删除重复事件”。
这是否可以“就地”完成,例如,按顺序处理每个日志文件的一些小缓冲区?我不能简单地将所有文件读入 Event[],对列表进行排序,然后删除重复项,但到目前为止,我有限的编程能力只能让我将此视为解决方案。当我同时从每个日志中读取事件时,是否可以使用一些更复杂的方法来执行此操作?
最佳答案
读取每个日志文件的第一行
循环
一个。找到“最早”的行。
将“最早”行插入主日志文件
从包含最早行的文件中读取下一行
您可以检查 b 和 c 之间的重复项,为每个文件推进指针。
关于java - 合并大文件的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/128043/