Таблица 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-процесса