170 похожих чатов

Здравствуйте. Подскажите пожалуйста как решается такая задача: есть апи, которое читает

число из БД, увеличивает его на 1, записывает увеличенное число в БД, и возвращает.
Нужно поддерживать уникальность этого числа
Проблема в том, что если я много раз вызову метод апи, в такой реализации, не поддерживается никакая блокировка.
Как правильно блокировать этот метод, как то на уровне БД? Вот код, который есть сейчас:
public async Task<int> GetCount()
{
var valueCount = await _context.Counter.FirstOrDefaultAsync();
valueCount.CountValue++;
await _context.SaveChangesAsync();
return valueCount.CountValue;
}

6 ответов

13 просмотров

Одним запросом выполняйте просто, а не двумя. Типа update set value = value +1 Синтаксис на память не помню.

А в чём проблема с блокировкой? Не особо понял

samurai
А в чём проблема с блокировкой? Не особо понял

Имеется в виду, что если в бд лежит 0, то после двух параллельных запросов может оказаться в БД не 2, в 1

Это понятно. В чём проблема заблокировать потоки на время обновления не понятно

Меня смущает ещё, что метод Get имеет side effect, не совсем очевидный по названию

samurai
Это понятно. В чём проблема заблокировать потоки н...

Не масштабируется такой подход. Если у тебя несколько инстансов приложения — то всё разнесёт. Блокировка на уровне приложения работает только в случае, если ты можешь организовать для этого приложения монопольный доступ к базе. А это чаще всего не так (если у тебя админ смотрит в ту же базу и чего-то меняет руками — доступ уже получается не монопольный).

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта