如何使用 Java 以最优化的方式在大型排序文件中搜索特定的 number/timestamp?
How can I search for a specific number/timestamp in a large sorted file in most optimized way using Java?
我的文件由日志组成。其中,每一行都是一个以起始列为时间的日志。文件中的所有行都根据时间戳排序。我必须找出给定时间戳在给定文件中出现的位置,文件大小可能约为 10gb。我可以逐行依次检查。有什么方法可以以优化的方式找到所需的吗?
编辑:我正在考虑应用二进制搜索。但是我应该采用什么方法对文件应用二进制搜索?我可以使用 randomAccessFile class 并使用指针吗?如果是这样,我如何才能找到我的指针所在的特定行的开头以获得该日志的时间戳,谢谢。
文件中的示例日志:
2020-01-31T20:12:38.1234Z、字段 1、字段 2 等.....\n
选项 1(最快):
如果可能,创建另一个文件作为生成输入时文件的索引。这可以表示字节数组中每一行的索引以及该行的长度(以字节为单位)。您甚至可以将其分解为多个索引文件。
// 1 is line id, 0 is byte start index, 12 is end index
1 0 12
选项 2:
一个好的解决方案是 binary search 实施。这可能比线性搜索快得多。这个想法是,如果您要查找的内容不等于中间元素(行),那么您将使用文件字节数组的左半部分,否则使用字节数组的右半部分。
我的文件由日志组成。其中,每一行都是一个以起始列为时间的日志。文件中的所有行都根据时间戳排序。我必须找出给定时间戳在给定文件中出现的位置,文件大小可能约为 10gb。我可以逐行依次检查。有什么方法可以以优化的方式找到所需的吗?
编辑:我正在考虑应用二进制搜索。但是我应该采用什么方法对文件应用二进制搜索?我可以使用 randomAccessFile class 并使用指针吗?如果是这样,我如何才能找到我的指针所在的特定行的开头以获得该日志的时间戳,谢谢。
文件中的示例日志: 2020-01-31T20:12:38.1234Z、字段 1、字段 2 等.....\n
选项 1(最快):
如果可能,创建另一个文件作为生成输入时文件的索引。这可以表示字节数组中每一行的索引以及该行的长度(以字节为单位)。您甚至可以将其分解为多个索引文件。
// 1 is line id, 0 is byte start index, 12 is end index
1 0 12
选项 2:
一个好的解决方案是 binary search 实施。这可能比线性搜索快得多。这个想法是,如果您要查找的内容不等于中间元素(行),那么您将使用文件字节数组的左半部分,否则使用字节数组的右半部分。