|
|
|
Как вы определяете уровень изоляции транзакций?
|
|||
|---|---|---|---|
|
#18+
Иногда сталкиваюсь с вопросом определения уровня изоляции на собеседованиях, как допустим уровень изоляции выбрать для реализации метода апдейта баланса, опыта подобной работы у меня нет, поэтому не знаю током что отвечать. В проекте со сложной бизнес логикой может быть куча запросов различных вариаций, ошибка выбора уровня может привести к неправильным расчетам, над этим каждый раз надо ломать голову? Или используются какие-то простые принципы в зависимости от СУБД с которой идет работа, типа если это рид онли, то такой-то, если апдейт одного поля с отбором по ключу то такой-то, если для всего более сложного сериалайзабл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:34 |
|
||
|
Как вы определяете уровень изоляции транзакций?
|
|||
|---|---|---|---|
|
#18+
MaxNevermindИногда сталкиваюсь с вопросом определения уровня изоляции на собеседованиях Вопрос по базам данных в форуме по Java? MaxNevermindкак допустим уровень изоляции выбрать для реализации метода апдейта баланса, опыта подобной работы у меня нет, поэтому не знаю током что отвечать. Наверное это намек на serializable, когда транзакции выстраиваются в очередь, так сводиться к минимуму конкуренции при чтении-записи баланса. MaxNevermindВ проекте со сложной бизнес логикой может быть куча запросов различных вариаций Запросы в базах данных. А сложную логику лучше выносить в Java а ещё более сложную в DSL. Только как сложность связана с транзакциями? MaxNevermindошибка выбора уровня может привести к неправильным расчетам Скорее ошибка проектирования, а не выбора уровня. MaxNevermindнад этим каждый раз надо ломать голову? Или используются какие-то простые принципы в зависимости от СУБД с которой идет работа, типа если это рид онли, то такой-то, если апдейт одного поля с отбором по ключу то такой-то, если для всего более сложного сериалайзабл? Обычно используется дефолтный Read Committed, до тех пор пока требования и их решения не приводят к выводу что нужен другой уровень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:42 |
|
||
|
Как вы определяете уровень изоляции транзакций?
|
|||
|---|---|---|---|
|
#18+
MaxNevermind , Здесь нужно просто понимать, какие непредвиденные эффекты могут возникать при том или ином уровне изоляции. И решать, готовы ли вы с ними жить. Например, поставили вы READ_COMMITTED. А нормально будет, если вы в рамках одной транзакции дважды попросите выдать сотрудников отдела "Закупки", и вам во второй раз вернется меньше людей, чем при первом вызове? Нет, тогда подкручивайте изоляцию до REPEATABLE_READ. И т.д.. Это все следует исключительно из требований к логике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:45 |
|
||
|
Как вы определяете уровень изоляции транзакций?
|
|||
|---|---|---|---|
|
#18+
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 запросов, в каждом несколько таблиц, некотороые просто читают, некоторые читают и апдейдят и т.п., что значит здесь "...до тех пор пока.." каждый запрос отдельная история, нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:08 |
|
||
|
Как вы определяете уровень изоляции транзакций?
|
|||
|---|---|---|---|
|
#18+
MaxNevermind http://www.postgresql.org/docs/9.1/static/transaction-iso.html вот здесь по-моему написано например, что Repeatable Read вроде для этой операции подходит, там прямо этот пример, нет?По моему HO упорядочивание надо делать средствами сервера приложений: надёжней и быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:17 |
|
||
|
Как вы определяете уровень изоляции транзакций?
|
|||
|---|---|---|---|
|
#18+
DEVcoach MaxNevermind , Здесь нужно просто понимать, какие непредвиденные эффекты могут возникать при том или ином уровне изоляции. И решать, готовы ли вы с ними жить. Например, поставили вы READ_COMMITTED. А нормально будет, если вы в рамках одной транзакции дважды попросите выдать сотрудников отдела "Закупки", и вам во второй раз вернется меньше людей, чем при первом вызове? Нет, тогда подкручивайте изоляцию до REPEATABLE_READ. И т.д.. Это все следует исключительно из требований к логике. Вы просто изложили какие возможны проблемы при использовании READ_COMMITTED, при чем достаточно абстрактно. Вы, например можете сказать с какой проблемой мы можете столкнуться написав подобное на уровне Read Committed: Код: java 1. 2. 3. 4. Ответ здесь - http://www.postgresql.org/docs/9.1/static/transaction-iso.html При чем, из этой общей теории о уровнях изоляции, то есть того что вы написали, это нельзя понять. И как вы будете тогда принимать решение о уровне изоляции если вы этого не знаете? Я это к тому, что выглядит так что, нужно глубоко вникать в специфику работы конкретной СУБД с который работаете и после этого ломать голову над каждым запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:23 |
|
||
|
Как вы определяете уровень изоляции транзакций?
|
|||
|---|---|---|---|
|
#18+
MaxNevermindломай голову над каждым запросом а вы не ломайте. Есть изоляция по умолчанию на всех СУБД AFAIK XXX_COMMITED. Её редко кто меняет. Пока не закоммитишь - никто тебя не видит. авторВот у нас 10 запросов, в каждом несколько таблиц, некотороые просто читают, некоторые читают и апдейдят и т.п., что значит здесь "...до тех пор пока.." каждый запрос отдельная история, нет? переведи мысль ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:36 |
|
||
|
Как вы определяете уровень изоляции транзакций?
|
|||
|---|---|---|---|
|
#18+
MaxNevermind , Разумеется, для каждой конкретной задачи надо разбираться с конкретной СУБД, и ее особенностями, а вы как хотели? 4 уровня изоляции это стандарт, которому вендоры могут следовать, а могут и нет. Вон, у Оракла, например, всего два уровня изоляции. Понимание смысла уровней изоляции дает вам начальный толчок в принятии решения. Далее надо ужо подключать знания особенностей конкретной СУБД. А этих особенностей очень много, и часть из них вообще уходит на уровень администрирования. Одни СУБД захватывают одни локи при одних условиях, другие - другие локи при других условиях, и т.д.. Комфортного общего знаменателя здесь нет и быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 17:00 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38629218&tid=2127257]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 558ms |

| 0 / 0 |
