Потоковое чтение решает размер файла, но не размер словаря частот. Для точного топ-N используйте внешнюю агрегацию: хеш-разбиение на дисковые бакеты или внешнюю сортировку.
Эффективная обработка файлов огромного объёма
Потоковое чтение решает размер файла, но не размер словаря частот. Для точного топ-N используйте внешнюю агрегацию: хеш-разбиение на дисковые бакеты или внешнюю сортировку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Размер входного текстового файла постоянно увеличивается и может достигать 100 ГБ и более, что делает невозможным загрузку его полностью в RAM. Как спроектировать обработку таких файлов, чтобы сервис оставался стабильным и корректно выдавал топ‑N самых часто встречающихся слов?
Ответ
Потоковое чтение решает размер файла, но не размер словаря частот. Для точного топ-N используйте внешнюю агрегацию: хеш-разбиение на дисковые бакеты или внешнюю сортировку.
Читайте файл ограниченными блоками, корректно сохраняя границы слов и UTF-8. Нормализованные слова распределяйте по хешу в временные файлы. Каждый бакет агрегируйте отдельно; слишком большой повторно разбивайте. Так все вхождения одного слова попадают в одну группу.
По готовым частотам поддерживайте кучу размера N, не сортируя весь словарь в памяти. Альтернатива — отсортировать токены внешней сортировкой и считать одинаковые соседние значения. Нужны лимиты диска, checkpoint, проверка завершения и уборка временных файлов после успеха. Приближённые sketch-методы экономят ресурсы, но не заменяют точный результат без согласования погрешности.