Задержка при получении из базы данных по асинхронным запросам - PullRequest
0 голосов
/ 06 июля 2019

У меня есть таблица с именем «транзакции», а другая - с именем «пользователи»

Когда пользователь запрашивает сервер, я получаю из транзакций его остаток последней транзакции и увеличиваю или уменьшаю базу баланса по его запросу.,

все работает хорошо,

, но проблема в том, что когда он пытается запросить 10 или более раз в секунду, не считая ответ на что-то вроде асинхронных запросов, скорость отправки запроса больше скоростиполучения баланса из базы данных, поэтому у меня проблема с вычислением нового баланса.

что-то вроде этого:

Раздел A: баланс: 100, сумма 0, новый баланс: 100

Раздел B: баланс (полученный из раздела A): 100, сумма: -10, новый баланс: 90

Раздел C: баланс (полученный из последнего раздела): 100 (поскольку раздел b еще не законченустановить баланс на 90), сумма: -10, новый баланс: 90

Когда это происходит в миллисекундах. Баланс в разделе C - это баланс в разделе A, а не баланс в разделе B!потому что раздел B еще не закончен, чтобы вызвать базу данных, установите баланс, 90, так что это проблема

лучший пример:

Example

Я знаю некоторые решения для решения этой проблемы, но я хочу решить эту проблему другим способом.

найденные решения:

1-Блокировка базы данных для текущего пользователя в начале раздела Bи разблокируйте его в конце и не позволяйте разделу C запускаться, пока база данных (или пользователь) не заблокируется!

2-Throttle запросы для каждого пользователя, не позволяйте пользователям отправлять 10 запросов, напримерчерез минуту или что-то в этом роде

По причинам, по которым я не хочу ограничивать пользователей в отправке запросов.а решение № 1 снижает производительность ответа пользователей.

какие алгоритмы вы рекомендуете?

Спасибо.

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