Для меня да, всегда считал что транзакция это атомарная и неделимая операция записи в БД. А вовсе не единица некой работы, запрос на чтение обычно проходит вовсе без транзакций, тоже ведь некая единица работы с БД )
Если используется пессимистическая блокировка, то только в транзакции и читать. Транзакция это атомарная и неделимая операция в бд. Слова про запись - лишние
Серьезно? Это где такое написано?
Написано что именно?
Что я на запросы на чтение обязан наложить транзакцию если используется пессеместическая блокировка?
А как ты иначе запретишь читать другим подключениям?
Так блокировка то и запрещает, зачем мне транзакция на чтение?
Как ты технически заблокируешь строчки в бд на чтение без транзакции?
Так видимо у нас не понимание, возьмем пример, есть некая таблица, допустим мы планируем в нее писать, открываем транзакцию с блокировкой и начинаем всякое там делать, 10 запросов на чтение всего подряд, еще двадцать на запись... и прочее, и есть другой совсем кейс который только читает, другая апишка какаято, там мне нафига транзакцию открывать?
Транзакция не блокирует доступ в бд если ты там только читаешь, даже если ты прокинул в метод объект транзакции. Блокировка начнется только тогда, когда ты изменишь какую нибудь запись
>и есть другой совсем кейс который только читает, другая апишка какаято, там мне нафига транзакцию открывать? Если ты только читаешь, то причём тут пессимистическая блокировка?
Ну а как же, сервер же, один клиент пишет, другой читает, одна таблица на всех... Нет? Я к тому что если не предполагается писать, то и транзакция не нужна.
Если не предполагается писать, то не нужна. Но может быть так, что ты не знаешь, будешь ли ты писать или нет, пока не прочтёшь данные, и хочешь быть уверенными, что никто больше их не прочтёт, пока ты не закончил
Может для консистентности итогового результатата необходим уровень изоляции транзакций - повторяемое чтение
Так куда денется консистентность если никто не пишет?
Паралельные юзеры могут успеть модифицировать данные в базе
Ну так на их вызовах где идет модификация и нужно транзакцию ставить нет? А не у того кто только читает... Вы блин можете нормальный пример привести?
Если они модифицируют, то понятно что в транзакции
Так мы о том и спорили тут, что если не предпологается запись то и транзакция не нужна. А вот там где она предпологается уже надо смотреть нужна или нет, а для ТОЛЬКО читающих я ни одного примера не знаю чтобы она была нужна.
"Не всегда можно заранее знать, будешь ты писать или нет"
Я ответил на вопрос - зачем нужна транзакция если модификаций не предполагается
нет, не ответили, зачем читающим запросам ставить транзакцию если там нигде потом в коде нет ни одного запроса на запись?
Ответил - https://t.me/DotNetRuChat/1536640
Как читающие могут нарушить консистентность?
Не читающие, а читающим https://t.me/DotNetRuChat/1536642
Но транзакция с блокировкой то ставится пишушими, а не читающими, об этом и спор. Александр утверждает что читающие тоже должны ставить, я не пойму зачем.
Уже привёл
Вы написали что слово запись лишнее, а оно является основой того надо ставить транзакцию или нет, по моему ессно.
Я ответил на твой вопрос в каком случае такое нужно
В вашем примере записывающий. зачем читающему открывать транзакцию? Простой же вопрос.
Я не писал ставить
Только при записи, верно я вас понял?
Что только при записи?
Транзакция имеет смысл к использованию
Так если строки со значением 42 не будет, то и операции записи не будет
Ещё раз - если есть вероятность при выполнении серии читающих запросов что другой юзер успеет изменить данные которые могли быть использованы читателем, то возможна неконсистентность результата. Для избежания этого читающие запросы выполняют в транзакции с уровнем изоляции - повторяемое чтение
У вас в коде есть запрос записи, это записывающий, завершится ли операция реальной записью, или упадет с исключением, или отвалится по условию не важно, важно что там в принципе есть запрос записи, об этом речь
Это уже софистика пошла
Вот щас внезапно это было... уровень изоляции пишуший ставит всегда, и еменно по его транзакции сервер решает что отдать читающим. Нет?
Я вам приводил примеры.
Нет, уровень изоляции ставится транзакции
Ставится все верно, но его поставить пишуший, на кой его ставить читающим? я чего то не знаю?
Видимо, стоит почитать про уровни изоляции транзакций
Возможно. Пробегусь еще раз, мож упустил чего.
Глянул, да вспомнил всю эту катавасию, но это все касается только не блокированных данных, то есть имеет смысл только в том случае если пишущие не блокируют таблицы или записи. Но в целом все верно, в таком виде транзакции для чтения применимы. Запутал меня человек блокировкой.
Обсуждают сегодня