Пессимистичный в CosmosDB

Меня беспокоит, как себя вести в случае, если многопользовательская система сталкивается с одновременными обновлениями. В основном мы используем хранимую процедуру для реализации нашей логики. Я знал, что ETag имеет встроенный оптимистичный контроль параллелизма и использует код состояния ответа HTTP 412, чтобы знать, что система сталкивается с предусловным отказом (мы можем рассматривать это как одновременные обновления).

Но после того, как я прочитал больше в документации msdn, я не увидел никакого встроенного пессимистичного параллелизма, я заметил, что есть код состояния HTTP 449 (повтор с), но я не знаю, является ли это флагом, чтобы приложение знало, что есть параллелизм. Обновить?

Я говорю в контексте единственного мастера - одиночной записи. Мы планируем переместить нашу систему бронирования из локальной среды в облако и использовать CosmosDB в качестве базы данных, но в старой версии (локальной) мы используем SQL Server с режимом сериализации в хранимой процедуре, чтобы ограничить несогласованное состояние наших данных.

Посоветуйте или дайте мне некоторую информацию для реализации пессимистичного параллелизма в CosmosDB или в основном в облаке.


person vietvoquoc    schedule 07.03.2020    source источник


Ответы (1)


449 означает, что вам нужно повторить запрос. Если вы получите это обратно в клиенте SDK, выполните новое чтение и повторите попытку.

Для такой базы данных, как Cosmos DB, вам потребуется реализовать распределенную блокировку. У Мартина Клеппманна есть статья Как делать распределенные блокировка, которая может оказаться полезной.

Однако следует помнить о том, что это существенно повлияет на вашу пропускную способность. Вот почему Cosmos изначально не обеспечивает пессимистическую блокировку.

Надеюсь, это будет полезно.

person Mark Brown    schedule 08.03.2020
comment
Или возьмите блокировку в отдельной нераспределенной системе, например вызовите sp_getapplock в небольшой базе данных SQL Azure. docs.microsoft.com/en-us/sql/relational-databases/ - person David Browne - Microsoft; 08.03.2020
comment
Спасибо за вашу помощь. Позвольте мне проверить статью, которую вы здесь упомянули. - person vietvoquoc; 10.03.2020