Недавно я создаю API REST как часть задания, в котором я должен увеличить счетчик в таблице базы данных, предполагая, что в таблице есть только один столбец, я должен запускать около 1000 запросов в секунду к этому API REST для увеличения счетчик и в конце данные должны быть согласованными, т.е. если изначально значение счетчика в БД равно 0, то после успешного запуска 1000 запросов одновременно оно должно быть 1000.
Пока не беспокойтесь, я достиг этого с помощью блокировки на уровне строк базы данных, другим способом может быть использование транзакции (с максимальной изоляцией) вокруг кода, который увеличивает счетчик, но я заметил, что хотя это достижимо для поддержания согласованности, но это достигается за счет высокой задержки, например, я запускаю тест Jmeter с 1000 запросов в секунду в течение 5 секунд, и все запросы полностью выполняются примерно за 26 секунд, что действительно является огромной задержкой.
Теперь это создало много вопросов в моей голове -
Должны быть какие-то сценарии или приложения в реальном времени, в которых этот уровень высокого параллелизма обрабатывается с малой задержкой, не так ли?
Всегда ли это ограничение реляционной базы данных и можно ли каким-то образом решить нереляционную базу данных nosql?
- Я подумал о том, чтобы ставить в очередь такие одновременные запросы с некоторой очередью сообщений, но опять же, это будет поведение не в реальном времени, если пользователь ожидает какого-либо ответа.
Заранее спасибо, любая помощь приветствуется.