Асинхронные запросы и операции
Выполнение в асинхронном режиме доступно только для запросов на загрузку, обновление и выгрузку данных, полученных по HTTP.
Запуск асинхронного запроса
Чтобы запустить запрос на загрузку, обновление или выгрузку данных в асинхронном режиме, отправьте HTTP-запрос query с флагом async, имеющим значение true
.
Ответ на асинхронный запрос
При получении асинхронного запроса система возвращает ответ с идентификатором requestId
, подтверждающим начало выполнения операции. Статус обработки операции можно отследить, как описано в секции ниже.
Значение requestId
равно значению x-request-id
, переданному в заголовке запроса. Если x-request-id
отсутствует в заголовке, значение requestId
генерируется системой.
Пример ответа на асинхронный запрос с корректным синтаксисом:
{
"requestId": "e3793ee4-8e63-4d83-9fba-0af49f9c251f",
"message": "Async operation started"
}
Пример ответа на асинхронный запрос с некорректным синтаксисом:
{
"exceptionMessage": "Error parsing query"
}
Отслеживание статуса асинхронной операции
Статус обработки асинхронных операций можно отслеживать с помощью GET-методов query/{requestId} и queries.
Ограничения асинхронных операций
- Асинхронное выполнение доступно только для запросов загрузки, обновления и выгрузки данных; для остальных запросов признак
async
игнорируется. - Предполагается, что в одной инсталляции системы одновременно выполняется небольшое количество асинхронных запросов (до ~100 запросов).
- Параллельное выполнение нескольких асинхронных операций в одной таблице недоступно.
- Информация об ошибке асинхронной операции в таблице хранится до появления новой асинхронной операции в этой таблице.
- Запуск асинхронной операции невозможен, если уже существует асинхронная операция с таким же идентификатором
requestId
. - В идентификаторе
requestId
не поддерживаются следующие символы (подробнее см. в документации ZooKeeper):- точка или две точки без добавления других символов;
- спецсимволы Unicode;
- строка
zookeeper
без добавления других символов.