1

Я новичок в документеDb. Я написал хранимую процедуру, которая проверяет все записи и обновляет их при определенных обстоятельствах.DocumentDB: Как запустить запрос без тайм-аута

Текущий сценарий:

Она будет работать 100 записей, в то время, обновляет их и после запуска несколько раз (с 100 записей, в то время и обновлении) это таймаут.

Expectation

Запустите скрипт на всех записей без тайм-аута.

Документ имеет около миллиона записей. Таким образом, запуск одного и того же сценария несколько раз вручную не является тем способом, который я ищу.

Может кто-нибудь, пожалуйста, сообщите мне, как я могу это достичь?

+0

Возможно, вы имели в виду, что «коллекция имеет около миллиона документов», когда вы написали «документ имеет около миллиона записей»? –

ответ

1

tl; dr; Продолжайте ссылаться на sproc, когда токен продолжения запроса передается туда и обратно.

Нескольких мыслей:

  1. Там нет емкости БПРМА для коллекций, которые позволят вам сделать все миллионы в одном обращении к sproc.

  2. Sprocs запускается изолированно на одной реплике. Это означает, что они могут быть транзакционными, но их использование будет иметь меньшую пропускную способность, чем обычный запрос, который может использовать все реплики для удовлетворения запроса, поэтому, если вам не нужно, чтобы он был в sproc, я рекомендую использовать прямые запросы для чтения, которые не должны быть транзакционными с записью. Даже тогда, когда миллион документов, ваши запросы будут максимальными, и вам придется снова выполнить запрос с помощью токена продолжения.

  3. Если вы должны использовать sproc ... Как вы, вероятно, знаете, так как вы сделали 100 за один раз, каждый запрос возвращает токен продолжения. Фактически вы можете добавить это в пакет, который вы отправляете обратно из своего sproc, когда он истечет. Затем вы можете передать это обратно в другой призыв к тому же sproc и написать свой sproc, чтобы забрать, где вы остановились. Библиотека documentdb-utils для node.js автоматически перезапускает sproc до тех пор, пока вы будете следовать this pattern for writing your sprocs. Если вы используете node.js, вы можете использовать его (но он еще не был обновлен для поддержки секционированных коллекций), или вы могли бы написать эквивалент на любой платформе, которую используете.

+0

Привет Ларри. Я думаю, что я не объяснил это правильно, я не выбирал 100 записей за раз, но когда я попытался собрать все записи, он просто собрал 100 за раз. Будет ли ограничение времени для запросов прямого обновления? – TheDeveloper

+0

Значение по умолчанию 'responseOptions.pageSize' равно 100. Вы должны установить его равным -1, если хотите, чтобы он попытался получить как можно больше, но я рекомендую против него в sproc (но это нормально в прямом запросе). Обычно я устанавливаю его на уровне 1000 или 10000. Это позволяет sproc делать инкрементный прогресс и запоминать его, когда sproc превысил лимит времени выполнения. Подход, который я рекомендую, рассчитывает на то, что он не подходит для очень больших наборов результатов. Вот пример sproc, который устанавливает pageSize и перезапускается, если он истекает: https://github.com/lmaccherone/documentdb-utils/blob/master/sprocs/countDocuments.coffee –

Смежные вопросы