1

У меня есть брандмауэр Azure для мобильных устройств для моего приложения. Я использую MSSQL в очень готовом виде. Тем не менее, у меня есть несколько клиентов, которые могут одновременно получить доступ к тем же объектам в теории. Адекватное решение для меня было бы использовать Optimistic Locking, чтобы избежать любых проблем с параллелизмом.Как реализовать оптимистичную блокировку в Azure Mobile Service?

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

function update(item, user, request) { 
    query.where... 
    request.execute(); 
} 

Но нет никакого запроса в обновлении? Производительность важна для моего приложения, так как я ожидаю, что там будет много запросов.

ответ

0

Оптимистическая блокировка действительно не имеет смысла для Интернета. Ваши операции чтения и обновления являются безстоящими и являются частью независимых запросов (чистая настройка HTTP может быть хорошей идеей).

Это не означает, что каждый запрос не может использовать транзакцию (см. Объект mssqlhttp://msdn.microsoft.com/en-us/library/windowsazure/jj554212.aspx). Но из принципиально распределенного веб-приложения введение транзакции по нескольким запросам обычно является плохим архитектурным решением. (См. Теорему CAP).

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

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