Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вы определяете уровень изоляции транзакций? / 8 сообщений из 8, страница 1 из 1
29.04.2014, 15:34
    #38629043
MaxNevermind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы определяете уровень изоляции транзакций?
Иногда сталкиваюсь с вопросом определения уровня изоляции на собеседованиях, как допустим уровень изоляции выбрать для реализации метода апдейта баланса, опыта подобной работы у меня нет, поэтому не знаю током что отвечать.
В проекте со сложной бизнес логикой может быть куча запросов различных вариаций, ошибка выбора уровня может привести к неправильным расчетам, над этим каждый раз надо ломать голову? Или используются какие-то простые принципы в зависимости от СУБД с которой идет работа, типа если это рид онли, то такой-то, если апдейт одного поля с отбором по ключу то такой-то, если для всего более сложного сериалайзабл?
...
Рейтинг: 0 / 0
29.04.2014, 15:42
    #38629055
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы определяете уровень изоляции транзакций?
MaxNevermindИногда сталкиваюсь с вопросом определения уровня изоляции на собеседованиях
Вопрос по базам данных в форуме по Java?

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

MaxNevermindВ проекте со сложной бизнес логикой может быть куча запросов различных вариаций

Запросы в базах данных. А сложную логику лучше выносить в Java а ещё более сложную в DSL. Только как сложность связана с транзакциями?

MaxNevermindошибка выбора уровня может привести к неправильным расчетам

Скорее ошибка проектирования, а не выбора уровня.

MaxNevermindнад этим каждый раз надо ломать голову? Или используются какие-то простые принципы в зависимости от СУБД с которой идет работа, типа если это рид онли, то такой-то, если апдейт одного поля с отбором по ключу то такой-то, если для всего более сложного сериалайзабл?
Обычно используется дефолтный Read Committed, до тех пор пока требования и их решения не приводят к выводу что нужен другой уровень.
...
Рейтинг: 0 / 0
29.04.2014, 15:45
    #38629061
DEVcoach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы определяете уровень изоляции транзакций?
MaxNevermind ,
Здесь нужно просто понимать, какие непредвиденные эффекты могут возникать при том или ином уровне изоляции. И решать, готовы ли вы с ними жить. Например, поставили вы READ_COMMITTED. А нормально будет, если вы в рамках одной транзакции дважды попросите выдать сотрудников отдела "Закупки", и вам во второй раз вернется меньше людей, чем при первом вызове? Нет, тогда подкручивайте изоляцию до REPEATABLE_READ. И т.д.. Это все следует исключительно из требований к логике.
...
Рейтинг: 0 / 0
29.04.2014, 16:08
    #38629103
MaxNevermind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы определяете уровень изоляции транзакций?
BlazkowiczMaxNevermindИногда сталкиваюсь с вопросом определения уровня изоляции на собеседованиях
Вопрос по базам данных в форуме по Java?
Вопросы на Java собеседовании, хотелось бы услышать как именно они решают подобные задачи да решают ли в принципе, может я вопрос не правильно понимаю.

BlazkowiczMaxNevermindкак допустим уровень изоляции выбрать для реализации метода апдейта баланса, опыта подобной работы у меня нет, поэтому не знаю током что отвечать.
Наверное это намек на serializable, когда транзакции выстраиваются в очередь, так сводиться к минимуму конкуренции при чтении-записи баланса.
http://www.postgresql.org/docs/9.1/static/transaction-iso.html вот здесь по-моему написано например, что Repeatable Read вроде для этой операции подходит, там прямо этот пример, нет?

BlazkowiczMaxNevermindВ проекте со сложной бизнес логикой может быть куча запросов различных вариаций

Запросы в базах данных. А сложную логику лучше выносить в Java а ещё более сложную в DSL. Только как сложность связана с транзакциями?
Сложная логика - сложные запросы - ломай голову над каждым запросом, пытаясь выяснить поломается ли что-нибудь если сделать так или так.

BlazkowiczMaxNevermindошибка выбора уровня может привести к неправильным расчетам

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

BlazkowiczMaxNevermindнад этим каждый раз надо ломать голову? Или используются какие-то простые принципы в зависимости от СУБД с которой идет работа, типа если это рид онли, то такой-то, если апдейт одного поля с отбором по ключу то такой-то, если для всего более сложного сериалайзабл?
Обычно используется дефолтный Read Committed, до тех пор пока требования и их решения не приводят к выводу что нужен другой уровень. Вот у нас 10 запросов, в каждом несколько таблиц, некотороые просто читают, некоторые читают и апдейдят и т.п., что значит здесь "...до тех пор пока.." каждый запрос отдельная история, нет?
...
Рейтинг: 0 / 0
29.04.2014, 16:17
    #38629127
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы определяете уровень изоляции транзакций?
MaxNevermind http://www.postgresql.org/docs/9.1/static/transaction-iso.html вот здесь по-моему написано например, что Repeatable Read вроде для этой операции подходит, там прямо этот пример, нет?По моему HO упорядочивание надо делать средствами сервера приложений: надёжней и быстрее.
...
Рейтинг: 0 / 0
29.04.2014, 16:23
    #38629143
MaxNevermind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы определяете уровень изоляции транзакций?
DEVcoach MaxNevermind ,
Здесь нужно просто понимать, какие непредвиденные эффекты могут возникать при том или ином уровне изоляции. И решать, готовы ли вы с ними жить. Например, поставили вы READ_COMMITTED. А нормально будет, если вы в рамках одной транзакции дважды попросите выдать сотрудников отдела "Закупки", и вам во второй раз вернется меньше людей, чем при первом вызове? Нет, тогда подкручивайте изоляцию до REPEATABLE_READ. И т.д.. Это все следует исключительно из требований к логике.
Вы просто изложили какие возможны проблемы при использовании READ_COMMITTED, при чем достаточно абстрактно.
Вы, например можете сказать с какой проблемой мы можете столкнуться написав подобное на уровне Read Committed:
Код: java
1.
2.
3.
4.
BEGIN;
UPDATE website SET hits = hits + 1;
-- run from another session:  DELETE FROM website WHERE hits = 10;
COMMIT;


Ответ здесь - http://www.postgresql.org/docs/9.1/static/transaction-iso.html
При чем, из этой общей теории о уровнях изоляции, то есть того что вы написали, это нельзя понять. И как вы будете тогда принимать решение о уровне изоляции если вы этого не знаете? Я это к тому, что выглядит так что, нужно глубоко вникать в специфику работы конкретной СУБД с который работаете и после этого ломать голову над каждым запросом.
...
Рейтинг: 0 / 0
29.04.2014, 16:36
    #38629176
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы определяете уровень изоляции транзакций?
MaxNevermindломай голову над каждым запросом
а вы не ломайте. Есть изоляция по умолчанию на всех СУБД AFAIK XXX_COMMITED.
Её редко кто меняет.
Пока не закоммитишь - никто тебя не видит.
авторВот у нас 10 запросов, в каждом несколько таблиц, некотороые просто читают, некоторые читают и апдейдят и т.п., что значит здесь "...до тех пор пока.." каждый запрос отдельная история, нет?
переведи мысль
______________________________________________
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
29.04.2014, 17:00
    #38629218
DEVcoach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы определяете уровень изоляции транзакций?
MaxNevermind ,
Разумеется, для каждой конкретной задачи надо разбираться с конкретной СУБД, и ее особенностями, а вы как хотели? 4 уровня изоляции это стандарт, которому вендоры могут следовать, а могут и нет. Вон, у Оракла, например, всего два уровня изоляции.
Понимание смысла уровней изоляции дает вам начальный толчок в принятии решения. Далее надо ужо подключать знания особенностей конкретной СУБД.
А этих особенностей очень много, и часть из них вообще уходит на уровень администрирования. Одни СУБД захватывают одни локи при одних условиях, другие - другие локи при других условиях, и т.д.. Комфортного общего знаменателя здесь нет и быть не может.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вы определяете уровень изоляции транзакций? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]