Аналитика Telegram-канала
Подписчики
3 008
Охват за 24 ч
545
ER за 24 ч
18,12%
Публикаций
283
Динамика подписчиков
7 дней
30 дней
6 месяцев
Больше
23 окт26 окт29 окт
Показаны последние 7 дней
Больше истории →
Охваты публикаций
20.1020.1023.1026.1027.1028.10
719
Средний охват
1,5K
Лучший результат
Показаны 6 публикаций — последние в канале
Больше статистики →
Упоминания
60
Упоминаний
7
Из них репостов
38
Каналов
19
Упоминаний
3
Из них репостов
12
Каналов
Последние посты
3 из 283 2 из 283
Уровни изоляций.
Честно, я первый раз про них узнал на собесах. Меня спросили, я продолбался и пошёл читать. Разобраться — разобрался, но ещё долго думал, что они нужны только для того, чтобы на собесах отвечать 🌟
Если того же мнения — велком. Сначала на пальцах разберёмся что это такое, а затем — зачем вообще уметь их настраивать
https://youtu.be/_IVRzj94z4w
ещё
657
8
9 28 окт, 17:08
Вчерашний квиз: правильно ответили 38% 🥰
Останется 70. 25% выбрали 40, и бухгалтерия с ними согласна: списали дважды по 30. А в базе 70: клиент потратил 60, заплатил 30.
Представь копилку и тетрадку, где записан остаток. Двое одновременно заглянули в тетрадку: 100. Каждый взял из копилки 30 и написал "осталось 70". В копилке 40, в тетрадке 70. Арифметика верная, просто второй переписал первого.
Почему Read Committed не спас? Он обещает одно: ты не прочитаешь то, что другой ещё не закоммитил. Оба прочитали закоммиченные 100. От "прочитал, посчитал, записал" он не защищает.
Ошибку (23%) дал бы Repeatable Read: Postgres увидит, что строку поменяли после чтения, и ответит второму ошибкой 40001. Её надо ловить и повторять. "Как повезёт" (14%) тоже мимо: оба успели прочитать, поэтому 70 каждый раз.
А теперь обычный код на EF:
var account = db.Accounts.Single(a => a.Id == id);
account.Balance -= 30;
db.SaveChanges();
В базу уходит SET "Balance" = @p0, и в @p0 лежит 70. EF шлёт готовое число, а не вычитание 🔥
db.Accounts.Where(a => a.Id == id)
.ExecuteUpdate(s => s.SetProperty(a => a.Balance, a => a.Balance - 30));
Здесь уходит "Balance" - 30. Второй запрос ждёт первый, перечитывает строку и списывает уже с 70. Итог 40.
Транзакция не спасает от гонки, если считаешь в памяти. Считай в базе.
Поищи у себя Balance -=. Я подожду 🫡
ещё
882
5
1 17 27 окт, 10:46
ещё
966
3
4 4 26 окт, 14:00
Похожие Telegram-каналы
Новости без политоты
StepOne | Степан Минин
НейроДичь
Продолжить анализ этого канала
- История роста подписчиков
- Просмотры и охваты публикаций
- Кто упоминает канал и кого упоминает он
- Похожие каналы и подбор для рекламы
Открыть аналитику
Демо до 14 дней