Я знаю, что это старый вопрос, но я думаю, что есть смысл для нового ответа для любого, кто в конечном итоге найдет этот вопрос.
Я согласен, что чтение 100 ГБ требует времени, поэтому я также согласен с тем, что нам нужно найти наиболее эффективный вариант, чтобы читать его, чтобы его было как можно меньше, вместо того, чтобы просто думать: «Кого волнует, сколько это, если уже много ", так что давайте выясним наше самое низкое возможное время.
Другое решение:
Кэшировать кусок необработанных данных
Используйте fread, чтобы прочитать кеш этих данных
Читать построчно
Строковое чтение из кэша до конца кэша или до конца найденных данных
Прочитать следующий фрагмент и повторить
Возьмите необработанную последнюю часть фрагмента (ту, в которой вы искали разделитель строк) и переместите ее вперед, затем прочитайте фрагмент указанного вами размера минус размер необработанных данных и поместите его только после этого необработанного чанка, у вас получился новый полный чанк.
Повторяйте чтение по строке и этот процесс, пока файл не будет прочитан полностью.
Вам следует использовать кэш-память большего размера, чем любой ожидаемый размер строки.
Чем больше размер кэша, тем быстрее вы читаете, но чем больше памяти вы используете.