Мне нужно обновить сущность хранилища данных таким образом, чтобы несколько одновременных пользователей не делали одно и то же.
Я понимаю, что не могу использовать SQL для обновления хранилища данных, но я не уверен, что еще будет работать.
Вот как я мог бы добиться этого в СУБД с использованием SQL:
-- Account.Balance = current balance
-- Account.Rate = increase per second
-- Account.CheckDate = the last time the balance was checked and updated
-- so we need to find the number of seconds since the last check,
-- update the balance by rate*seconds, then update the check datetime
UPDATE Account
SET Account.Balance = Account.Balance + ( DATEDIFF(S, GETDATE(), Account.CheckDate) * Account.Rate),
Account.CheckDate = GETDATE()
Я знаю, что могу обернуть все операции в одну транзакцию, но как я могу гарантировать, что обновление не будет просчитано из-за нескольких пользователей без использования одной операции обновления, как показано в SQL?
Вы, вероятно, можете видеть, что несколько операций, таких как:
1. Read entity
2. Update values
3. Save entity
может не работать из-за того, что несколько пользователей делают одно и то же
Я предполагаю, что есть несколько возможных способов достижения этого, и я ищу тот, который лучше всего подойдет для этого и будущих требований.
================== ОТВЕТ ==================
Когда я дошел до этого момента, я понял, что, если я обновлю баланс и дату проверки одновременно, все будет хорошо.
Параллельные обновления ничего не сломают:)
Но я думал, что все равно выложу!
Я все еще рад видеть лучшие решения, хотя ...