我已经在整个互联网上进行了探索以找到解决方案;但他们都忽略了一个重要问题。最好的解决方案是在 Stack Overflow 中
$file = new SplFileObject('longFile.txt');
$fileIterator = new LimitIterator($file, 1000, 2000);
foreach($fileIterator as $line) {
echo $line, PHP_EOL;
}
但与其他方法一样,这需要从文件的开头读取才能到达偏移线。通常可以忽略不计;但是对于大文件(比如数百万行),这会显着减慢进程。时间随着偏移量的增加而单调增加。如果您将偏移量设置为数百万,则处理时间将是几秒钟。
在数据库(如 mysql)中,我们对表进行索引以读取一行,而无需遍历整个数据库。文件键(行号)有没有做这样的事情?我想知道像 SQLite 和 Berkeley DB 这样的平面文件数据库是如何索引它们的表的。