НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
118 of 182 menu

Таблица batch

Таблица batch является ключевым компонентом системы пакетной обработки Drupal. Она позволяет выполнять длительные операции (такие как импорт большого количества данных, массовое обновление сущностей, обработка файлов) небольшими порциями, не превышая лимиты времени выполнения скрипта и используя приемлемое количество памяти.

Поля

Поле Тип данных Описание
bid int Уникальный идентификатор пакетного задания. Первичный ключ с автоинкрементом.
token varchar(64) Уникальный токен, используемый для идентификации пакетного задания в URL и формах. Обеспечает безопасность доступа к конкретному заданию.
timestamp int Временная метка UNIX создания пакетного задания. Используется для очистки устаревших заданий.
batch longblob Сериализованные данные пакетного задания. Содержит всю информацию о задаче: callback-функции, параметры, текущее состояние выполнения, результаты.

Как это работает

Когда модуль инициирует длительную операцию с помощью batch_set(), Drupal создает запись в таблице batch. Данные операции сериализуются и сохраняются в поле batch. Пользователю возвращается страница с прогресс-баром, которая периодически отправляет AJAX-запросы для выполнения следующей порции (шага) операции.

Каждый шаг выполняется отдельным HTTP-запросом, что позволяет избежать проблем с таймаутами. После выполнения каждого шага обновленные данные пакета сериализуются и сохраняются обратно в поле batch. Это позволяет продолжить выполнение с того же места, даже если пользователь закрыл браузер и вернулся позже.

Toкен в поле token обеспечивает безопасность, предотвращая несанкционированный доступ к выполнению пакетных заданий. Система периодически очищает таблицу от устаревших записей (обычно через 24 часа) с помощью drupal_cron_run().

Пакетная обработка особенно полезна для операций, которые не могут быть выполнены за один HTTP-запрос из-за ограничений времени выполнения или памяти, таких как массовое обновление тысяч нод, импорт данных из CSV-файлов или применение сложных миграций.

Пример SQL-запроса

Посмотреть активные пакетные задания можно следующим запросом:

SELECT bid, token, FROM_UNIXTIME(timestamp) as created_date FROM batch WHERE timestamp > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) ORDER BY timestamp DESC;

Смотрите также

  • таблицу queue,
    которая управляет фоновыми задачами через очередь
  • таблицу semaphore,
    которая обеспечивает блокировки для конкурентного доступа
  • таблицу variable,
    которая хранит системные настройки и переменные
  • таблицу cache_bootstrap,
    которая кэширует критически важные данные bootstrap-процесса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить