Поддерживает ли Cosmos DB транзакции с несколькими разделами? - PullRequest
0 голосов
/ 07 ноября 2018

Я бы хотел переместить документ в другой раздел, изменив ключ раздела. Я где-то читал, что сначала необходимо удалить документ и создать новый с новым ключом раздела. Если это так, может ли эта транзакция быть атомарной? Другими словами, возможно ли выполнить транзакцию между двумя разделами и выполнить откат, если одна операция обновления / записи не удалась?

1 Ответ

0 голосов
/ 07 ноября 2018

Нет, эта операция не является транснациональной.

Как вы, вероятно, знаете, ключ раздела является неизменным и не может быть изменен, поэтому вам необходимо сначала удалить его, а затем заново создать его с другим значением.

Использование хранимой процедуры, поддерживающей транзакции, нецелесообразно, поскольку SP могут работать только с одним разделом. Это означает, что вам нужно два из них, чтобы выполнить удаление / создание, что, в свою очередь, означает, что он больше не транскрипционный.

То, что вы можете сделать, чтобы «обмануть», - это сохранить документ, который вы удаляете, в памяти, затем выполнить операцию удаления и проверить ответ, чтобы увидеть, был ли документ успешно удален. Если это было так, то перейдите к созданию нового и проверьте ответ создания. Если он был создан успешно, то вы счастливы. Если удаление или создание завершилось неудачно, заново создайте документ в памяти. Однако это также может привести к тому, что созданный документ не будет воссоздан, но это самое близкое, что у вас есть, чтобы имитировать это поведение.

...