Тёмный

Работаем с транзакциями в БД правильно / Сергей Новиков (Real Time Technologies) 

HighLoad Channel
Подписаться 83 тыс.
Просмотров 9 тыс.
50% 1

Приглашаем на конференцию Saint HighLoad++ 2024, которая пройдет 24 и 25 июня в Санкт-Петербурге!
Программа, подробности и билеты по ссылке: vk.cc/cuyIqx
--------
--------
РИТ++ 2019, Backend Conf
Тезисы и презентация:
backendconf.ru/moscow-rit/2019...
Работа с транзакциями в базе данных - одна из больных тем при разработке backend-приложения. При кажущейся простоте процесса ("сначала BEGIN, в конце COMMIT") в разных проектах периодически возникают одни и те же ошибки. Причина в одинаковых подходах к работе с транзакциями, которые правильнее назвать анти-паттернами.
...
--------
Нашли ошибку в видео? Пишите нам на support@ontico.ru

Опубликовано:

 

26 апр 2020

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 9   
@OStrekalovsky
@OStrekalovsky 4 года назад
Вот чего не стоит делать - так это считать, что блокировки в Redis такие же надёжные, как в базах.
@user-sl2sc1pz5h
@user-sl2sc1pz5h 3 года назад
Доклад интересный 👍 Внимание обратить стоит
@Andrzej3935
@Andrzej3935 2 года назад
Спасибо!
@FirstEmperor1
@FirstEmperor1 4 года назад
Спасибо
@dmitryvikharev414
@dmitryvikharev414 4 года назад
Приятно слушать, полезная информация. Пока шёл доклад - неспешно смотрел/находил релевантную информацию в поисковике. Например понравилось - генерация кастомной ошибки в хранимой процедуре (проверка sms-code и т.п.)
@sergnochevny
@sergnochevny 2 года назад
идея с обертыванием транзакции в отдельный класс и ролбеком в деструкторе, как мне кажется, порочна сама по себе. как минимум, неочевидностью происходящего. и тут же, в примере с ансетом в обработке эксепшена, вы сами это подтверждаете. ансет не вызовет деструктор. деструктор будет вызван гарбеж коллектором при освобождении ресурсов, что можно инициировать и раньше, но, обычно, это происходит при завершении скрипта. в результате, ваша транзакция остается открытой.
@sergnochevny
@sergnochevny 2 года назад
​@@IskhartakhВы оправдываетесь. Вы даете конкретные рекомендации и приводите код. Это уже нельзя воспринимать обобщенно. И это требует конкретных уточнений. RAII общий паттерн, но это узкий паттерн. Применим он к ресурсам или общим объектам, освобождение, которых должно быть просто гарантировано, а не гарантировано в конкретный момент. транзакция таким обьектом не является. Да и при чем тут с++, если пример даете на php? Вы заведомо вводите в заблуждение, применяя RAII там, где применять его нельзя. Это справедливо в любых языках, где организована сборка мусора. и не только. в том же с++ нужно очень осторожно применять такой подход в отношении транзакций, поскольку следует понимать момент вызова деструктора или звать его явно. Но, судя по наличию в примере оператора unset, склоняюсь к тому, что Вы просто предполагали вызов интерпретатором деструктора именно в этом месте. Итог - рекомендовать RAII в отношении транзакций не только нельзя, но и противопоказано. И это нужно понимать.
@sergnochevny
@sergnochevny 2 года назад
@@Iskhartakh То есть, Вы не понимаете, что пример с ансетом приведет к непредсказуемому поведению, ожидая там ролбэк транзакции, который будет вызван только в завершении скрипта? а что будет с остальными обращениями к базе в таком случае, которые последуют за ансетом? Вы не можете гарантировать ролбэк транзакции в конкретном месте, применяя RAII. Это Вам тоже не понятно?
@sergnochevny
@sergnochevny 2 года назад
@@IskhartakhСкоупом Вы будете оперировать в с++. Вы не автор - ок. Зачем вообще писать разного рода глупости об общих принцыпах, если Вы не понимаете о чем идет речь в конкретном случае.
Далее
Что такое ACID за 9 минут
9:46
Просмотров 32 тыс.