Руководство по производительности
DataStore обеспечивает значительный прирост производительности по сравнению с pandas для многих операций. В этом руководстве объясняется, почему это так и как оптимизировать ваши рабочие нагрузки.
Почему DataStore быстрее
1. SQL Pushdown
Операции выполняются непосредственно в источнике данных:
2. Отсечение столбцов
Читаются только необходимые столбцы:
3. Ленивое вычисление
Несколько операций объединяются в один запрос:
Бенчмарк: DataStore и pandas
Тестовая среда
- Данные: 10 миллионов строк
- Оборудование: стандартный ноутбук
- Формат файла: CSV
Результаты
| Операция | pandas (мс) | DataStore (мс) | Победитель |
|---|---|---|---|
| GroupBy count | 347 | 17 | DataStore (19.93x) |
| Combined ops | 1,535 | 234 | DataStore (6.56x) |
| Complex pipeline | 2,047 | 380 | DataStore (5.39x) |
| MultiFilter+Sort+Head | 1,963 | 366 | DataStore (5.36x) |
| Filter+Sort+Head | 1,537 | 350 | DataStore (4.40x) |
| Head/Limit | 166 | 45 | DataStore (3.69x) |
| Ultra-complex (10+ ops) | 1,070 | 338 | DataStore (3.17x) |
| GroupBy agg | 406 | 141 | DataStore (2.88x) |
| Select+Filter+Sort | 1,217 | 443 | DataStore (2.75x) |
| Filter+GroupBy+Sort | 466 | 184 | DataStore (2.53x) |
| Filter+Select+Sort | 1,285 | 533 | DataStore (2.41x) |
| Sort (single) | 1,742 | 1,197 | DataStore (1.45x) |
| Filter (single) | 276 | 526 | Сравнимо |
| Sort (multiple) | 947 | 1,477 | Сравнимо |
Ключевые выводы
- Операции GroupBy: DataStore до 19.93 раза быстрее
- Сложные пайплайны обработки: DataStore в 5–6 раз быстрее (благодаря SQL pushdown)
- Простые операции выборки (slice): Производительность сопоставима — разница пренебрежимо мала
- Оптимальный сценарий: Многошаговые операции с groupby/агрегацией
- Zero-copy:
to_df()не добавляет накладных расходов на преобразование данных
Когда выигрывает DataStore
Тяжёлые агрегации
Сложные конвейеры обработки данных
Обработка больших файлов
Операции над несколькими столбцами
Когда pandas сопоставим по производительности
В большинстве сценариев DataStore соответствует производительности pandas или превосходит её. Однако в следующих конкретных случаях pandas может быть немного быстрее:
Небольшие наборы данных (<1,000 строк)
Простые операции среза
Пользовательские лямбда-функции на Python
Даже в сценариях, когда DataStore оказывается «медленнее», производительность обычно сопоставима с pandas — разница пренебрежимо мала для практического использования. Преимущества DataStore в сложных операциях значительно перевешивают эти редкие случаи.
Для тонкой настройки выполнения см. раздел Execution Engine Configuration.
Zero-copy интеграция DataFrame
DataStore использует zero-copy при чтении и записи pandas DataFrame. Это означает:
Ключевые выводы:
to_df()практически не имеет накладных расходов — нет сериализации и копирования памяти- Создание DataStore из pandas DataFrame происходит мгновенно
- Память разделяется между DataStore и представлениями pandas
Рекомендации по оптимизации
1. Включите режим повышенной производительности для тяжёлых нагрузок
Для нагрузок с интенсивным использованием агрегаций, где вам не нужен точный формат вывода pandas (порядок строк, столбцы MultiIndex, корректировки dtype), включите режим повышенной производительности для максимальной пропускной способности:
Ожидаемый прирост производительности: Ускорение выполнения рабочих нагрузок с фильтрацией и groupby в 2–8 раз, снижение потребления памяти при работе с крупными файлами Parquet.
Подробности см. в разделе Performance Mode.
2. Используйте формат Parquet вместо CSV
Ожидаемый прирост производительности: операции чтения в 3–10 раз быстрее
3. Выполняйте фильтрацию как можно раньше
4. Выбирайте только нужные столбцы
5. Используйте агрегатные функции SQL
6. Используйте head() вместо выполнения полных запросов
7. Пакетные операции
8. Используйте explain() для оптимизации
Профилирование нагрузки
Включите профилирование
Определение узких мест
Сравнение подходов
Краткое резюме рекомендаций
| Рекомендация | Результат |
|---|---|
| Включите режим повышенной производительности | В 2–8 раз быстрее для нагрузок с агрегациями |
| Используйте файлы Parquet | Чтение в 3–10 раз быстрее |
| Фильтруйте как можно раньше | Сократите объём обрабатываемых данных |
| Выбирайте только нужные столбцы | Сократите I/O и потребление памяти |
| Используйте GroupBy/агрегации | До 20 раз быстрее |
| Объединяйте операции в батчи | Избегайте повторного выполнения |
| Проводите профилирование перед оптимизацией | Найдите реальные узкие места |
| Используйте explain() | Проверьте оптимизацию запроса |
| Используйте head() для выборок | Избегайте полного сканирования таблицы |
Краткое руководство по выбору
| Ваша рабочая нагрузка | Рекомендация |
|---|---|
| GroupBy/агрегация | Используйте DataStore |
| Сложный многошаговый конвейер обработки данных | Используйте DataStore |
| Крупные файлы с фильтрами | Используйте DataStore |
| Простые операции выборки (slice) | Любой вариант (сопоставимая производительность) |
| Пользовательские Python-функции lambda | Используйте pandas или выполните преобразование на позднем этапе |
| Очень небольшой объём данных (<1 000 строк) | Любой вариант (незначительная разница) |
Для автоматического оптимального выбора движка используйте config.set_execution_engine('auto') (по умолчанию).
Для максимальной пропускной способности при нагрузках с агрегацией используйте config.use_performance_mode().
Подробности см. в разделах Execution Engine и Performance Mode.