Почему PostgreSQL откатывает изменения разных строк
Вспомнила вопрос с недавнего собеса и решила разобрать в канале.
Две транзакции меняют разные счётчики, но одна из них всё равно может завершиться ошибкой. Причина в том, как база отслеживает захват объектов.
Пример: таблица
Для проверки база запоминает, кто какую область читал. Эти отметки -
При
Поэтому база учитывает две зависимости:
- T1 меняет строку
- T2 меняет строку
Требования противоречат друг другу. PostgreSQL отклоняет одну транзакцию с ошибкой
Это ложный конфликт: счётчики можно изменить в любом порядке, но широкая отметка связала две независимые операции.
Чтение через индекс может сузить отметку до строки/страницы и тем самым уменьшить число конфликтов. Поэтому при разборе таких откатов полезно проверить план выполнения запроса. Но полностью исключить конфликты нельзя: приложение должно уметь при ошибке
классная статья про блокировки в постгрес
#production_case
Вспомнила вопрос с недавнего собеса и решила разобрать в канале.
Две транзакции меняют разные счётчики, но одна из них всё равно может завершиться ошибкой. Причина в том, как база отслеживает захват объектов.
Пример: таблица
counters(id PRIMARY KEY, value), без триггеров и связей с другими таблицами. Обе транзакции работают в SERIALIZABLE. Сначала выполняются оба SELECT, затем оба UPDATE и попытки COMMIT:-- Транзакция T1
SELECT value FROM counters WHERE id = 1;
UPDATE counters SET value = value + 1 WHERE id = 1;
-- Транзакция T2
SELECT value FROM counters WHERE id = 2;
UPDATE counters SET value = value + 1 WHERE id = 2;
SERIALIZABLE обещает результат успешных транзакций как будто транзакции выполняются последовательно.Для проверки база запоминает, кто какую область читал. Эти отметки -
SIReadLock - не блокируют запись. Они помогают заметить, что чужое изменение затронуло прочитанные данные.Пример: T1 прочитала старое значение, а T2 его изменила. Значит, в последовательном выполнении T1 должна быть раньше T2. Иначе она увидела бы новое значение. Так появляется зависимость T1 → T2.
При
Seq Scan - последовательном чтении таблицы - отметка чтения ставится на всю таблицу, хотя запрос меняет одну строку.Поэтому база учитывает две зависимости:
- T1 меняет строку
1 → задевает отметку T2 → T2 должна быть раньше T1.- T2 меняет строку
2 → задевает отметку T1 → T1 должна быть раньше T2.Требования противоречат друг другу. PostgreSQL отклоняет одну транзакцию с ошибкой
serialization_failure, код 40001. Это ложный конфликт: счётчики можно изменить в любом порядке, но широкая отметка связала две независимые операции.
Чтение через индекс может сузить отметку до строки/страницы и тем самым уменьшить число конфликтов. Поэтому при разборе таких откатов полезно проверить план выполнения запроса. Но полностью исключить конфликты нельзя: приложение должно уметь при ошибке
40001 повторить всю транзакцию, включая чтения.классная статья про блокировки в постгрес
#production_case
1🔥17❤7 6 1
Катя Кондратьева
Почему PostgreSQL откатывает изменения разных строк Вспомнила вопрос с недавнего собеса и решила разобрать в канале. Две транзакции меняют разные счётчики, но одна из них всё равно может завершиться ошибкой. Причина в том, как база отслеживает захват объектов.…
Знаю, что выглядит сложно, но я объясню вам, братья и сестры, зачем это нужно
Конечно же, чтобы продавать такие продакшен-кейсы как собственные интересные задачи на собеседовании.
Сохраняйте и не забудьте упомянуть, рассказывая про интересный опыт на интервью.
Конечно же, чтобы продавать такие продакшен-кейсы как собственные интересные задачи на собеседовании.
Сохраняйте и не забудьте упомянуть, рассказывая про интересный опыт на интервью.
1🔥14 7❤6🍓3
This media is not supported in your browser
VIEW IN TELEGRAM
🔥28❤11 6🍌2 1
GPT Pro 20X больше не купить
Я не слежу за появлением новых моделей или обновлением существующих. Однако эта новость для меня важна, потому что я сама использую кодекс в разработке и всегда рекомендовала именно этот инструмент.
Купить новую подписку теперь можно только на версию за 100 баксов, где лимит на токены в 4 раза меньше. Есть жалобы и в комьюнити, и среди моих знакомых, что лимиты тратятся намного быстрее, чем раньше. И сейчас не хватает даже двух подписок Pro-версии для закрытия рабочих задач.
Тратить 40к, чтобы просто закрыть задачи по работе - не самая привлекательная перспектива.
У меня текущий план Pro 20X, буду его дальше продлевать и следить за динамикой. Но кажется, самое время начать искать альтернативные решения.
P.S. Стрим, где я пишу код с кодексом, опять переносится, планирую также на среду 🙏🏻
Искренне извиняюсь перед всеми, кто ждал, но зато чем больше будет моя подготовка к нему, тем должен быть качественнее результат.
Я не слежу за появлением новых моделей или обновлением существующих. Однако эта новость для меня важна, потому что я сама использую кодекс в разработке и всегда рекомендовала именно этот инструмент.
Купить новую подписку теперь можно только на версию за 100 баксов, где лимит на токены в 4 раза меньше. Есть жалобы и в комьюнити, и среди моих знакомых, что лимиты тратятся намного быстрее, чем раньше. И сейчас не хватает даже двух подписок Pro-версии для закрытия рабочих задач.
Тратить 40к, чтобы просто закрыть задачи по работе - не самая привлекательная перспектива.
У меня текущий план Pro 20X, буду его дальше продлевать и следить за динамикой. Но кажется, самое время начать искать альтернативные решения.
P.S. Стрим, где я пишу код с кодексом, опять переносится, планирую также на среду 🙏🏻
Искренне извиняюсь перед всеми, кто ждал, но зато чем больше будет моя подготовка к нему, тем должен быть качественнее результат.
❤26🍓5 4🌭1
600 баксов в месяц за ChatGPT?
Недавно писала, что подписку Pro за 200 баксов больше не купить.
Теперь у истории появилось продолжение: ChatGPT Pro Max будет стоить $600.
Это пока утечка. Официального подтверждения цены и даты запуска я не нашла.
Есть предположения, что в новом плане акцент будет на скорости работы агентов. Грустни, бесконечных лимитов ждать не стоит(
Надеюсь мне не придется переходить на тариф выше из-за урезания текущего 🙂
Недавно писала, что подписку Pro за 200 баксов больше не купить.
Теперь у истории появилось продолжение: ChatGPT Pro Max будет стоить $600.
Это пока утечка. Официального подтверждения цены и даты запуска я не нашла.
Есть предположения, что в новом плане акцент будет на скорости работы агентов. Грустни, бесконечных лимитов ждать не стоит(
Надеюсь мне не придется переходить на тариф выше из-за урезания текущего 🙂
Сегодня впервые за 20 лет российский спортсмен Сергей Данилов выступил на самом престижном турнире по бодибилдингу «Мистер Олимпия»
Я тренируюсь как любитель, но слежу за профессиональным спортом и для меня это событие имеет значение.
Сергей действительно огромный: при росте 187 см он выглядит буквально как мутант. К этому турниру он шёл более 10 лет, проведённых в жёстких тренировках, тяжёлом массонаборе и использовании фармакологии.
Спортсмен не обладатель классной генетики, его пропорции не подходят для Classic Physique. Поэтому чтобы достигать успеха в спорте, ему приходилось раскачиваться до гиганстких размеров и выигрывать за счета количества мышечной массы.
В 18 лет у него был инфаркт. После него бодибилдер восстановился и снова вернулся к подготовке. Главная мотивация тренироваться дальше - выйти на Олимпию.
Сегодня он добился своей цели. Ради этих полутора минут на сцене были потрачены больше десяти лет жизни. К сожалению, он не вошёл в топ-10.
Поздравляю Сергея с этим достижением. И благодарю за то, что своим примером он напоминает, какую цену порой приходится платить за свои желания.
Например, может быть, не обязательно несколько лет пытаться попасть в Яндекс или FAANG. Возможно, необязательно стараться расти внутри компании до уровня руководителя. Может быть, вам не нужно пытаться занять место C-level менеджера, особенно с учётом того, что политику компании выбираете не вы и не можете влиять на стоимость акций, процентом от которых мечтаете владеть.
Необязательно ждать пока корабль утонет, с него можно спрыгнуть раньше.
Я тренируюсь как любитель, но слежу за профессиональным спортом и для меня это событие имеет значение.
Сергей действительно огромный: при росте 187 см он выглядит буквально как мутант. К этому турниру он шёл более 10 лет, проведённых в жёстких тренировках, тяжёлом массонаборе и использовании фармакологии.
Спортсмен не обладатель классной генетики, его пропорции не подходят для Classic Physique. Поэтому чтобы достигать успеха в спорте, ему приходилось раскачиваться до гиганстких размеров и выигрывать за счета количества мышечной массы.
В 18 лет у него был инфаркт. После него бодибилдер восстановился и снова вернулся к подготовке. Главная мотивация тренироваться дальше - выйти на Олимпию.
Тренировочный план бешеный, а поднимаемые веса огромны и несвойственны человеку; очевидно, что организму подобное долго не выдержать. Однако на интервью Данилов говорит, что это не имеет значения: ради того, чтобы оказаться на Олимпии, он готов умереть. В принципе, в мире бодибилдинга практика доживать до 30–40 лет распространена.
Сегодня он добился своей цели. Ради этих полутора минут на сцене были потрачены больше десяти лет жизни. К сожалению, он не вошёл в топ-10.
Поздравляю Сергея с этим достижением. И благодарю за то, что своим примером он напоминает, какую цену порой приходится платить за свои желания.
Возможно, не всякое дело стоит доводить до конца. И речь не только про спорт. К сожалению, чем дольше мы идём к цели, тем сложнее признать, что сама цель могла перестать быть нам нужна.
Например, может быть, не обязательно несколько лет пытаться попасть в Яндекс или FAANG. Возможно, необязательно стараться расти внутри компании до уровня руководителя. Может быть, вам не нужно пытаться занять место C-level менеджера, особенно с учётом того, что политику компании выбираете не вы и не можете влиять на стоимость акций, процентом от которых мечтаете владеть.
Необязательно ждать пока корабль утонет, с него можно спрыгнуть раньше.
🔥44❤21 9😁2 2
System Design: проектируем платёжную систему с нуля
Вышло новое большое видео на YouTube.
В этом видео разбираю архитектуру платёжной системы на примере интеграции с интернет-эквайрингом Т-Банка и опыта разработки платежей в собственном продукте - Polymorpher.
Пойдём от сбора требований и разбора флоу карточного платежа до критичных сценариев: дублирующиеся запросы, зависшие платежи, падение сервиса посреди операции и восстановление состояния после сбоя.
Внутри:
— способы подключения платежки в продукт;
— разбор требований к сервису;
— как проходит карточный платёж;
— high-level архитектура сервиса платежей;
— проектирование схем БД;
— обеспечение консистентности платежного функционала: idempotency и recovery point, защита от повторных списаний и дублей webhook;
— проектирование отказоустойчивой архитектуры.
Смотреть:
https://www.youtube.com/watch?v=TYeO2xkD7Hg
И как обещала - в комментариях прикладываю все схемы из видео: архитектура, sequence diagramа, схемы БД.
Сохраняйте, если готовитесь к секции по системному дизайну или планируете однажды прикручивать платежи в свой продукт.
#production_case
Вышло новое большое видео на YouTube.
В этом видео разбираю архитектуру платёжной системы на примере интеграции с интернет-эквайрингом Т-Банка и опыта разработки платежей в собственном продукте - Polymorpher.
Пойдём от сбора требований и разбора флоу карточного платежа до критичных сценариев: дублирующиеся запросы, зависшие платежи, падение сервиса посреди операции и восстановление состояния после сбоя.
Внутри:
— способы подключения платежки в продукт;
— разбор требований к сервису;
— как проходит карточный платёж;
— high-level архитектура сервиса платежей;
— проектирование схем БД;
— обеспечение консистентности платежного функционала: idempotency и recovery point, защита от повторных списаний и дублей webhook;
— проектирование отказоустойчивой архитектуры.
Смотреть:
https://www.youtube.com/watch?v=TYeO2xkD7Hg
И как обещала - в комментариях прикладываю все схемы из видео: архитектура, sequence diagramа, схемы БД.
Сохраняйте, если готовитесь к секции по системному дизайну или планируете однажды прикручивать платежи в свой продукт.
#production_case
❤45🔥24🍓9😁3 2
This media is not supported in your browser
VIEW IN TELEGRAM
3 силовые в неделю, 4 кардио, каждый день 10к шагов и дефицит калорий
В марте я начала регулярно заниматься в зале с тренером и с тех пор держу этот режим. Форма уже нравится, но еще сушусь - буду добавлять силовые, чтобы процесс ускорить.
Нет ничего приятнее, чем видеть результат от своих усилий. Радует!
В марте я начала регулярно заниматься в зале с тренером и с тех пор держу этот режим. Форма уже нравится, но еще сушусь - буду добавлять силовые, чтобы процесс ускорить.
Нет ничего приятнее, чем видеть результат от своих усилий. Радует!
❤42🔥28😁6 5 3
В 19 лет оффер на 320 000 ₽
Когда Коля обратился ко мне за помощью в трудоустройстве, ему было 18. Он только поступил в вуз, программирование изучал самостоятельно.
Он уже пробовал искать работу: за несколько месяцев было всего 3 собеседования, на которых, как он сам мне писал: «меня просто размазали».
Первые 2–3 месяца прорабатывали техническую часть: два созвона в неделю с вопросами и практикой по разным темам, разбирали код-ревью и лайвкодинг. По его словам, после такой подготовки недочеты в коде сразу бросались в глаза.
Получить предложение и сразу согласиться на все - понятное желание, особенно когда работу ищешь впервые и очень боишься упустить шанс. Но свои интересы тоже нужно уметь отстаивать. Поэтому отдельно разбирали и торг, и то, как договориться на удаленку вместо гибрида.
Он уже получил корпоративный ноутбук и оформил документы.
В свои 19, еще во время учебы ❤️
Когда Коля обратился ко мне за помощью в трудоустройстве, ему было 18. Он только поступил в вуз, программирование изучал самостоятельно.
Он уже пробовал искать работу: за несколько месяцев было всего 3 собеседования, на которых, как он сам мне писал: «меня просто размазали».
Дада, еще один пример жертвы курсов 🥲 Где финальная курсовая работа - это разработка микросервисной системы зоопарка..
Первые 2–3 месяца прорабатывали техническую часть: два созвона в неделю с вопросами и практикой по разным темам, разбирали код-ревью и лайвкодинг. По его словам, после такой подготовки недочеты в коде сразу бросались в глаза.
Так за 207 дней получил оффер на 281к gross. Помогла поторговаться - получилось 320к gross.
Разница в 39 тысяч каждый месяц просто за то, что обсудили условия 🤷🏻♀️
Получить предложение и сразу согласиться на все - понятное желание, особенно когда работу ищешь впервые и очень боишься упустить шанс. Но свои интересы тоже нужно уметь отстаивать. Поэтому отдельно разбирали и торг, и то, как договориться на удаленку вместо гибрида.
Он уже получил корпоративный ноутбук и оформил документы.
В свои 19, еще во время учебы ❤️
33🔥57❤16 7😁4 2
Ура 🥳 обновления от OpenAi
Теперь снова можно взять Pro 20X подписку!
Но.. теперь она будет давать только x10 токенов от лимита Plus, а раньше было x20. Стоимость сохраняется👍
Зато есть новый тир за 500 баксов, дающий x25 токенов!
Еще появились чубрики дотс с собственным облачным хранилищем, использовать которых можно будет как агентов с долговременной памятью. Они могут продолжать работу, даже когда компьютер выключен.
Например, им можно будет делегировать выполнение многоэтапных задач по типу закрытия таски под ключ: от составления задачи до выкладки в прод.
Пока не знаю 🤷🏻♀️ но точно этот лягушонок себя не на помойке нашел и выйдет в копеечку🥇
Теперь снова можно взять Pro 20X подписку!
Но.. теперь она будет давать только x10 токенов от лимита Plus, а раньше было x20. Стоимость сохраняется
Зато есть новый тир за 500 баксов, дающий x25 токенов!
Не задавайте вопросов про ценообразование, такая экономика
Еще появились чубрики дотс с собственным облачным хранилищем, использовать которых можно будет как агентов с долговременной памятью. Они могут продолжать работу, даже когда компьютер выключен.
Например, им можно будет делегировать выполнение многоэтапных задач по типу закрытия таски под ключ: от составления задачи до выкладки в прод.
Получается теперь не нужно строить собственный воркфлоу? 🤔
Пока не знаю 🤷🏻♀️ но точно этот лягушонок себя не на помойке нашел и выйдет в копеечку
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤5🌭5 3