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

48 ответов

76 просмотров

Для меня да, всегда считал что транзакция это атомарная и неделимая операция записи в БД. А вовсе не единица некой работы, запрос на чтение обычно проходит вовсе без транзакций, тоже ведь некая единица работы с БД )

Alexander-Ermakov Автор вопроса
Дмитрий Алексеев
Для меня да, всегда считал что транзакция это атом...

Если используется пессимистическая блокировка, то только в транзакции и читать. Транзакция это атомарная и неделимая операция в бд. Слова про запись - лишние

Alexander Ermakov
Написано что именно?

Что я на запросы на чтение обязан наложить транзакцию если используется пессеместическая блокировка?

Alexander-Ermakov Автор вопроса
Дмитрий Алексеев
Что я на запросы на чтение обязан наложить транзак...

А как ты иначе запретишь читать другим подключениям?

Alexander Ermakov
А как ты иначе запретишь читать другим подключения...

Так блокировка то и запрещает, зачем мне транзакция на чтение?

Alexander-Ermakov Автор вопроса
Дмитрий Алексеев
Так блокировка то и запрещает, зачем мне транзакци...

Как ты технически заблокируешь строчки в бд на чтение без транзакции?

Alexander Ermakov
Как ты технически заблокируешь строчки в бд на чте...

Так видимо у нас не понимание, возьмем пример, есть некая таблица, допустим мы планируем в нее писать, открываем транзакцию с блокировкой и начинаем всякое там делать, 10 запросов на чтение всего подряд, еще двадцать на запись... и прочее, и есть другой совсем кейс который только читает, другая апишка какаято, там мне нафига транзакцию открывать?

Дмитрий Алексеев
Так видимо у нас не понимание, возьмем пример, ест...

Транзакция не блокирует доступ в бд если ты там только читаешь, даже если ты прокинул в метод объект транзакции. Блокировка начнется только тогда, когда ты изменишь какую нибудь запись

Alexander-Ermakov Автор вопроса
Дмитрий Алексеев
Так видимо у нас не понимание, возьмем пример, ест...

>и есть другой совсем кейс который только читает, другая апишка какаято, там мне нафига транзакцию открывать? Если ты только читаешь, то причём тут пессимистическая блокировка?

Alexander Ermakov
>и есть другой совсем кейс который только читает, ...

Ну а как же, сервер же, один клиент пишет, другой читает, одна таблица на всех... Нет? Я к тому что если не предполагается писать, то и транзакция не нужна.

Alexander-Ermakov Автор вопроса
Дмитрий Алексеев
Ну а как же, сервер же, один клиент пишет, другой ...

Если не предполагается писать, то не нужна. Но может быть так, что ты не знаешь, будешь ли ты писать или нет, пока не прочтёшь данные, и хочешь быть уверенными, что никто больше их не прочтёт, пока ты не закончил

Дмитрий Алексеев
Так видимо у нас не понимание, возьмем пример, ест...

Может для консистентности итогового результатата необходим уровень изоляции транзакций - повторяемое чтение

Pavel S
Может для консистентности итогового результатата н...

Так куда денется консистентность если никто не пишет?

Дмитрий Алексеев
Так куда денется консистентность если никто не пиш...

Паралельные юзеры могут успеть модифицировать данные в базе

Pavel S
Паралельные юзеры могут успеть модифицировать данн...

Ну так на их вызовах где идет модификация и нужно транзакцию ставить нет? А не у того кто только читает... Вы блин можете нормальный пример привести?

Дмитрий Алексеев
Ну так на их вызовах где идет модификация и нужно ...

Если они модифицируют, то понятно что в транзакции

Pavel S
Если они модифицируют, то понятно что в транзакции

Так мы о том и спорили тут, что если не предпологается запись то и транзакция не нужна. А вот там где она предпологается уже надо смотреть нужна или нет, а для ТОЛЬКО читающих я ни одного примера не знаю чтобы она была нужна.

Alexander-Ermakov Автор вопроса
Дмитрий Алексеев
Так мы о том и спорили тут, что если не предполога...

"Не всегда можно заранее знать, будешь ты писать или нет"

Дмитрий Алексеев
Так мы о том и спорили тут, что если не предполога...

Я ответил на вопрос - зачем нужна транзакция если модификаций не предполагается

Pavel S
Я ответил на вопрос - зачем нужна транзакция если ...

нет, не ответили, зачем читающим запросам ставить транзакцию если там нигде потом в коде нет ни одного запроса на запись?

Pavel S
Ответил - https://t.me/DotNetRuChat/1536640

Как читающие могут нарушить консистентность?

Pavel S
Не читающие, а читающим https://t.me/DotNetRuChat/...

Но транзакция с блокировкой то ставится пишушими, а не читающими, об этом и спор. Александр утверждает что читающие тоже должны ставить, я не пойму зачем.

Alexander-Ermakov Автор вопроса
Alexander Ermakov
Я это не писал

Вы написали что слово запись лишнее, а оно является основой того надо ставить транзакцию или нет, по моему ессно.

Дмитрий Алексеев
Но транзакция с блокировкой то ставится пишушими, ...

Я ответил на твой вопрос в каком случае такое нужно

Alexander Ermakov
Уже привёл

В вашем примере записывающий. зачем читающему открывать транзакцию? Простой же вопрос.

Pavel S
Что только при записи?

Транзакция имеет смысл к использованию

Alexander-Ermakov Автор вопроса
Дмитрий Алексеев
В вашем примере записывающий. зачем читающему откр...

Так если строки со значением 42 не будет, то и операции записи не будет

Дмитрий Алексеев
Транзакция имеет смысл к использованию

Ещё раз - если есть вероятность при выполнении серии читающих запросов что другой юзер успеет изменить данные которые могли быть использованы читателем, то возможна неконсистентность результата. Для избежания этого читающие запросы выполняют в транзакции с уровнем изоляции - повторяемое чтение

Alexander Ermakov
Так если строки со значением 42 не будет, то и опе...

У вас в коде есть запрос записи, это записывающий, завершится ли операция реальной записью, или упадет с исключением, или отвалится по условию не важно, важно что там в принципе есть запрос записи, об этом речь

Pavel S
Ещё раз - если есть вероятность при выполнении сер...

Вот щас внезапно это было... уровень изоляции пишуший ставит всегда, и еменно по его транзакции сервер решает что отдать читающим. Нет?

Pavel S
Нет, уровень изоляции ставится транзакции

Ставится все верно, но его поставить пишуший, на кой его ставить читающим? я чего то не знаю?

Дмитрий Алексеев
Ставится все верно, но его поставить пишуший, на к...

Видимо, стоит почитать про уровни изоляции транзакций

Pavel S
Видимо, стоит почитать про уровни изоляции транзак...

Возможно. Пробегусь еще раз, мож упустил чего.

Pavel S
Видимо, стоит почитать про уровни изоляции транзак...

Глянул, да вспомнил всю эту катавасию, но это все касается только не блокированных данных, то есть имеет смысл только в том случае если пишущие не блокируют таблицы или записи. Но в целом все верно, в таком виде транзакции для чтения применимы. Запутал меня человек блокировкой.

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

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

30500 за редактор? )
Владимир
47
Недавно 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
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Oh sorry did you want it in Gunter's chains?
Martin Rys
15
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта