Могу ли я прочитать / загрузить документ из Azure Cosmos DB и получить блокировку записи на него одновременно? - PullRequest
1 голос
/ 10 февраля 2020

В основном я хочу знать, что только одна сторона собирается изменить документ. Я хочу избежать ситуации, когда 2 разных экземпляра рабочей роли или разных рабочих ролей будут читать одно и то же состояние документа, а затем каждый будет писать свою собственную модификацию, потенциально различную. Последовательная запись может легко go исправляться одна за другой, но это не то, что я хочу.

Эта блокировка записи должна автоматически истечь через некоторое время, если запись не произойдет по какой-либо причине.

Я слышал некоторые слухи, что это возможно, но я не могу найти это в документации.

1 Ответ

2 голосов
/ 10 февраля 2020

AFAIK, то, что вы ищете (получение блокировки записи) не поддерживается Cosmos DB, по крайней мере, на момент написания этого ответа. Сегодня поддерживается Optimistic Concurrency using ETags, который подходит для последовательной записи, но это не то, что вам нужно.

Просто подумав вслух, вы можете использовать Lease функциональность доступна в хранилище BLOB-объектов и использовать его в сочетании с операцией записи Cosmos DB.

По сути, ваши рабочие процессы будут пытаться получить аренду большого двоичного объекта на определенную продолжительность (15-60 секунд). Только один работник сможет получить аренду. Этот работник будет иметь возможность обновить документ в базе данных Cosmos на время, когда он получил блокировку. Другой рабочий процесс должен будет дождаться истечения срока аренды или первого работника, явно нарушившего аренду.

Это несколько похоже на Leader Election Pattern, описанное здесь: https://docs.microsoft.com/en-us/azure/architecture/patterns/leader-election .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...