Перейти к основному содержанию
DataStore обеспечивает заметно более высокую производительность, чем pandas, во многих операциях. В этом руководстве объясняется, почему это так и как оптимизировать рабочие нагрузки.

Почему DataStore работает быстрее

1. SQL Pushdown

Operations выполняются на стороне источника данных:

2. Отсечение столбцов

Считываются только необходимые столбцы:

3. Отложенное вычисление

Несколько операций сводятся к одному запросу:

Бенчмарк: DataStore и pandas

Тестовая среда

  • Данные: 10 миллионов строк
  • Оборудование: стандартный ноутбук
  • Формат файла: CSV

Результаты

Ключевые выводы

  1. Операции GroupBy: DataStore до 19,93 раза быстрее
  2. Сложные конвейеры: DataStore в 5–6 раз быстрее (за счёт SQL pushdown)
  3. Простые операции среза: Производительность сопоставима — разность незначительна
  4. Лучший сценарий использования: Многошаговые операции с GroupBy/агрегацией
  5. Zero-copy: to_df() работает без накладных расходов на преобразование данных

Когда DataStore предпочтительнее

Ресурсоемкие агрегации

Сложные конвейеры

Обработка больших файлов

Операции над несколькими столбцами


Когда производительность pandas сопоставима

В большинстве сценариев DataStore не уступает pandas по производительности или превосходит его. Однако в следующих случаях pandas может быть немного быстрее:

Небольшие наборы данных (<1,000 строк)

Простые операции среза

Пользовательские лямбда-функции Python

ВажноДаже в сценариях, где DataStore работает «медленнее», производительность обычно сопоставима с pandas — для практического использования разница пренебрежимо мала. Преимущества DataStore при сложных операциях с лихвой перевешивают такие редкие случаи.Для более тонкой настройки выполнения см. Настройка движка выполнения.

Интеграция DataFrame с поддержкой zero-copy

DataStore использует zero-copy при чтении и записи pandas DataFrame. Это означает:
Ключевые выводы:
  • to_df() практически ничего не стоит — без сериализации и копирования данных в памяти
  • Создание DataStore из pandas DataFrame происходит мгновенно
  • Память используется совместно между DataStore и представлениями pandas

Советы по оптимизации

1. Включите режим производительности для ресурсоёмких рабочих нагрузок

Для рабочих нагрузок с интенсивной агрегацией, где вам не требуется точный формат вывода pandas (порядок строк, столбцы MultiIndex, корректировка dtype), включите режим производительности для максимальной пропускной способности:
Ожидаемое улучшение: ускорение до 2–8 раз для рабочих нагрузок с filter+groupby, снижение использования памяти при работе с большими файлами Parquet. См. режим производительности для получения полной информации.

2. Используйте формат Parquet вместо CSV

Ожидаемое ускорение: чтение в 3–10 раз быстрее

3. Фильтруйте как можно раньше

4. Выбирайте только нужные столбцы

5. Используйте SQL-агрегации

6. Используйте head() вместо полноценных запросов

7. Пакетные операции

8. Используйте explain() для оптимизации


Профилирование рабочей нагрузки

Включить профилирование

Выявите узкие места

Сравнение подходов


Сводка рекомендаций


Краткое руководство по выбору

Для автоматического выбора оптимального движка используйте config.set_execution_engine('auto') (по умолчанию). Для максимальной пропускной способности в рабочих нагрузках с агрегацией используйте config.use_performance_mode(). Подробности см. в разделах Движок выполнения и Режим производительности.