tg-me.com/golang_books/1007
Last Update:
📁 Go: быстрая обработка гигантских файлов
Подход к обработке огромных файлов (миллионы строк) в Go: быстро, параллельно и без лишнего потребления памяти.
🔧 Идея: pipeline с каналами и воркерами
1. Читаем файл по строкам через bufio.Scanner
2. Передаём строки в батчах (например, по 100 000) в канал
3. Несколько горутин-воркеров обрабатывают эти батчи
4. Объединяем результаты и записываем/анализируем дальше
💡 Результаты:
• Последовательная обработка занимала ~19 секунд
• Параллельная (10 воркеров + batch size 100 000) — ~9 секунд
• Потребление памяти остаётся стабильным, даже на файлах 20+ ГБ
🛠 Почему это эффективно:
• Каналы позволяют читать и обрабатывать одновременно
• Батчи уменьшают количество аллокаций
• Возможна повторная инициализация []string через sync.Pool
• GC остаётся под контролем — без резких пиков
✅ Подходит для:
• CSV, JSONL, логов, текстовых потоков
• ETL-пайплайнов: чтение → обработка → сохранение
• Стриминговой обработки в аналитике и ML
📌 Советы:
• Используй runtime.NumCPU() для адаптивного количества воркеров
• Подбирай batchSize экспериментально (10–100 тыс строк)
•
Читать
BY Golang Books

Share with your friend now:
tg-me.com/golang_books/1007