🎯 Как мы обработали XML в 400 Мб: опыт интеграции с Oracle

🧠 Как обрабатывать XML-файлы размером 400+ Мб без краха сервера?

В одном из проектов перед нами стояла задача:

⁠Интегрировать данные из устаревшей системы Oracle в современный сервис на Django , при этом файлы XML, которые мы получали, весили более 400 Мб . 📌 Это не просто "загрузить и обработать". Это вызов — как технический, так и организационный. Сегодня поделюсь, как мы это сделали , какие инструменты использовали и что получили в результате.

🔍 Проблема

⁠Файлы XML были огромными и содержали сложную вложенную структуру ⁠Обычный парсинг через xml.etree.ElementTree приводил к высокому потреблению памяти ⁠Время обработки одного файла достигало 15–20 минут ⁠Сервер падал при попытке обработать несколько файлов одновременно

📌 Было понятно: нужно не просто решить задачу, а сделать это масштабируемо и надежно

⚙️ Как мы решили

⁠Парсинг через iterparse вместо полной загрузки в память

⁠Использовали xml.etree.ElementTree.iterparse() для потоковой обработки ⁠Очищали дерево после обработки каждого блока — освобождали память

⁠Разделение процесса на этапы

⁠Этап 1: Чтение и предварительная обработка XML ⁠Этап 2: Преобразование данных под нужды модели Django ⁠Этап 3: Пакетная запись в базу PostgreSQL

⁠Асинхронная обработка через Celery + Redis

⁠Задачи по обработке файлов вынесли в асинхронную очередь ⁠Так мы смогли обрабатывать множество файлов параллельно , не перегружая основной сервер

⁠Использование PostgreSQL bulk_create

⁠Для записи данных в базу применили bulk_create, чтобы минимизировать количество SQL-запросов ⁠Снизили нагрузку на БД и ускорили процесс в разы

⁠Логирование и мониторинг

⁠Добавили детальное логирование для отслеживания прогресса ⁠Подключили Prometheus + Grafana для мониторинга времени выполнения и ошибок

📈 Результат

До:

⁠Время обработки — до 20 мин ⁠Высокое потребление памяти ⁠Сервер падал при множественном запуске ⁠Ручное управление

После:

⁠Время обработки — до 3 мин ⁠Устойчивая работа даже с большими файлами ⁠Возможность параллельной обработки ⁠Автоматизированная система

📌 Мы не просто решили проблему — мы создали масштабируемое решение , которое можно использовать повторно в других проектах с большими объемами данных.

💡 Чему научились

⁠Не бойтесь работать с legacy-системами — есть решения даже для самых сложных случаев. ⁠При работе с большими данными важна не только производительность кода, но и архитектура . ⁠Асинхронность и автоматизация — ключевые элементы масштабируемости

#Django #DataProcessing #bigdata #optimization #CaseStudy #oracle #xml #Celery #PostgreSQL #devops #аутстаффинг #аутсорсинг

🎯 Как мы обработали XML в 400 Мб: опыт интеграции с Oracle | Сетка — социальная сеть от hh.ru 🎯 Как мы обработали XML в 400 Мб: опыт интеграции с Oracle | Сетка — социальная сеть от hh.ru