Вопрос или проблема
В настоящее время я исследую, какие решения могут быстро и эффективно сравнивать и производить дельту из CSV-файлов.
Я работаю с данными, которые выводятся из Sybase ASE. Эти файлы содержат полные таблицы и выводятся ежедневно. В одной таблице в настоящее время может быть до 80 миллионов записей, а размер CSV-файлов достигает 30 ГБ.
Мне нужно сравнить эти файлы с одного дня на другой, чтобы получить дельту, которая идентифицирует новые и обновленные записи (в настоящее время я игнорирую удаления). Это сравнение может осуществляться между последовательными файлами данных или последним файлом данных и словарём или списком. В данный момент я делаю это в SQL Server (с использованием кастомной хранимой процедуры), но мы хотели бы перейти на что-то, кроме стека Microsoft.
В конечном итоге мы будем создавать файлы Parquet из дельт.
Сначала я рассматривал возможность использования другой СУБД, такой как PostgreSQL или даже SQLite (это просто мысль!), но открыт для любых других предложений. Я думал о том, чтобы использовать некоторые big data фреймворки, такие как Spark, или даже Python и PANDA, но не уверен, являются ли они лучшими инструментами для этой работы.
На данном этапе есть явное предпочтение использовать что-то с открытым исходным кодом, но должно быть возможно запускать на месте.
Есть ли у кого-нибудь предложения, что может подойти?
Спасибо
Языки программирования, которые могут быть использованы для обработки больших файлов, следующие:
- Обычные высокоуровневые языки программирования, такие как Java, C/C++, C#, Basic и т.д.
- Данные файла импортируются в базу данных и обрабатываются с помощью SQL
- Python
- esProc SPL
В качестве примера текстового файла, в этой статье представлены характеристики вышеупомянутых методов для расчета больших файлов.
Вы можете попробовать Acho Studio, он работает довольно хорошо с большими CSV-файлами.
Ответ или решение
Для выполнения задачи по сравнению и созданию дельт из больших CSV файлов, поступающих из Sybase ASE, существует ряд подходящих программных инструментов и технологий. Ниже предлагаю несколько рекомендаций, учитывая ваши требования — производительность, возможность работы с открытым исходным кодом и выполнение обработки на местном сервере.
1. Apache Spark
Apache Spark — это мощный фреймворк для обработки больших данных, который отлично подходит для работы с большими CSV файлами. Spark использует разделение данных и алгоритмы распределенной обработки, что обеспечивает быструю обработку даже огромных массивов данных. Вы можете использовать PySpark (Python API для Spark) для обработки данных и создания дельт.
-
Преимущества:
- Высокая производительность на больших наборах данных.
- Возможность работы с данными в реальном времени и пакетной обработкой.
- Поддержка различных форматов, включая Parquet.
-
Недостатки:
- Требует конфигурации кластера Spark для полной оптимизации.
2. Dask
Dask — это библиотека Python, позволяющая обрабатывать большие объемы данных, не загружая их полностью в память. Dask работает аналогично Pandas, но распределяет задачи для параллельной обработки данных.
-
Преимущества:
- Простой в использовании и гибкий.
- Имеет интерфейс, аналогичный Pandas.
-
Недостатки:
- Зависит от памяти; в некоторых случаях может потребоваться больше ресурсов.
3. Pandas с оптимизацией
Если вы решите использовать Pandas, то с учетом того, что данные большие, рекомендую использовать chunking
(разбиение данных на части) для обработки файлов по частям. Сначала загрузите часть файла в память, выполните сравнение, затем переходите к следующей части.
-
Преимущества:
- Широкая поддержка и большое сообщество.
- Легко интегрируется с другими библиотеками Python.
-
Недостатки:
- Может быть медленным при работе с действительно огромными наборами данных.
4. PostgreSQL или SQLAlchemy
Вы упомянули возможность миграции на PostgreSQL. Вы можете импортировать данные в PostgreSQL и затем использовать SQL-запросы для выполнения дельта-сравнения. В сочетании с SQLAlchemy вы получите мощный инструмент для обработки данных с помощью Python.
-
Преимущества:
- Поддерживает большие объемы данных и имеет надежную систему транзакций.
- Легко интегрируется с другими инструментами обработки данных.
-
Недостатки:
- Требует настройки и администрирования базы данных.
5. Acho Studio
Вы также упомянули Acho Studio, который предназначен для обработки больших CSV файлов. Если он соответствует вашим требованиям к производительности, это может быть отличным вариантом.
-
Преимущества:
- Простота использования для аналитиков и разработчиков.
- Специализированный инструмент для работы с CSV.
-
Недостатки:
- Возможно, потребует дополнительных исследований для полной интеграции в ваш стек.
Заключение
Учитывая все вышесказанное, вам стоит внимательно оценить возможности Apache Spark и Dask, так как они обеспечивают необходимую масштабируемость и производительность для работы с большими объемами данных. Если предпочитаете SQL-подход, PostgreSQL будет хорошим выбором. Выбор зависит от ваших предпочтений в языке программирования и необходимой производительности.
Если у вас есть дополнительные вопросы или нужна помощь с реализацией, не стесняйтесь обращаться!