У меня есть таблица с именем «транзакции», а другая - с именем «пользователи»
Когда пользователь запрашивает сервер, я получаю из транзакций его остаток последней транзакции и увеличиваю или уменьшаю базу баланса по его запросу.,
все работает хорошо,
, но проблема в том, что когда он пытается запросить 10 или более раз в секунду, не считая ответ на что-то вроде асинхронных запросов, скорость отправки запроса больше скоростиполучения баланса из базы данных, поэтому у меня проблема с вычислением нового баланса.
что-то вроде этого:
Раздел A: баланс: 100, сумма 0, новый баланс: 100
Раздел B: баланс (полученный из раздела A): 100, сумма: -10, новый баланс: 90
Раздел C: баланс (полученный из последнего раздела): 100 (поскольку раздел b еще не законченустановить баланс на 90), сумма: -10, новый баланс: 90
Когда это происходит в миллисекундах. Баланс в разделе C - это баланс в разделе A, а не баланс в разделе B!потому что раздел B еще не закончен, чтобы вызвать базу данных, установите баланс, 90, так что это проблема
лучший пример:
Я знаю некоторые решения для решения этой проблемы, но я хочу решить эту проблему другим способом.
найденные решения:
1-Блокировка базы данных для текущего пользователя в начале раздела Bи разблокируйте его в конце и не позволяйте разделу C запускаться, пока база данных (или пользователь) не заблокируется!
2-Throttle запросы для каждого пользователя, не позволяйте пользователям отправлять 10 запросов, напримерчерез минуту или что-то в этом роде
По причинам, по которым я не хочу ограничивать пользователей в отправке запросов.а решение № 1 снижает производительность ответа пользователей.
какие алгоритмы вы рекомендуете?
Спасибо.