繁体   English   中英

如何使用 Java 以最优化的方式在大型排序文件中搜索特定数字/时间戳?

[英]How can I search for a specific number/timestamp in a large sorted file in most optimized way using Java?

我的文件由日志组成。 其中,每一行都是一个日志,起始列为时间。 文件中的所有行都根据时间戳排序。 我必须找出给定时间戳在给定文件中的位置,文件大小可能约为 10gb。 我可以逐行依次检查。 有什么方法可以以优化的方式完成以找到所需的吗?

编辑:我正在考虑应用二进制搜索。 但是我应该用 go 对文件应用二进制搜索的方法是什么? 我可以使用 randomAccessFile class 并使用指针吗? 如果是这样,我怎样才能发现我的指针所在的特定行的开始以获取该日志的时间戳,谢谢。

文件中的示例日志:2020-01-31T20:12:38.1234Z,field1,field2,etc,.....\n

选项 1(最快):

如果可能,在生成输入时创建另一个文件作为文件的索引。 这可以表示每行存在的字节数组中的索引以及行的长度(以字节为单位)。 您甚至可以将其分解为多个索引文件。

// 1 is line id, 0 is byte start index, 12 is end index 
1 0 12 

选项 2:

一个好的解决方案是二进制搜索实现。 这可能比线性搜索快得多。 这个想法是,如果您要查找的内容不等于中间元素(行),那么您将使用文件字节数组的左半部分,否则字节数组的右半部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM