|
|
|
Альтернатива SELECT FOR UPDATE NOWAIT
|
|||
|---|---|---|---|
|
#18+
На уровне приложения надо чтобы только один пользователь мог открыть для редактирования комплексный объект из базы (например, документ). Т.е. нужна блокировка, которая другим будет сигнализировать что объект заблокирован. Сейчас это сделано через SELECT FOR UPDATE NOWAIT. Вопрос - есть ли другие инструменты или подход для реализации того же на постгресе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 14:36 |
|
||
|
Альтернатива SELECT FOR UPDATE NOWAIT
|
|||
|---|---|---|---|
|
#18+
rupchikНа уровне приложения надо чтобы только один пользователь мог открыть для редактирования комплексный объект из базы (например, документ). Т.е. нужна блокировка, которая другим будет сигнализировать что объект заблокирован. Сейчас это сделано через SELECT FOR UPDATE NOWAIT. Вопрос - есть ли другие инструменты или подход для реализации того же на постгресе. для начала обьясните чем вас неустраивает select for update nowait? а так еще можно в сторону advisory locks посмотреть они зачастую удобнее ( http://www.postgresql.org/docs/9.4/static/explicit-locking.html#ADVISORY-LOCKS) --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 15:10 |
|
||
|
Альтернатива SELECT FOR UPDATE NOWAIT
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Эдвайзери лок были рассмотрены еще до for update, спасибо. Вопрос возник в следующем контексте. Сейчас приложение работает через select for update в read commited transactions. Некоторые части будут переписаны на serializable transactions. Поэтому интересно, возможно есть другая техника с учетом serializable без явного for update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 15:37 |
|
||
|
Альтернатива SELECT FOR UPDATE NOWAIT
|
|||
|---|---|---|---|
|
#18+
rupchik, в случае, если "забор" объекта -- лишь логический (длинная транзакция не открывается) -- есть техника "логической блокировки" ("забора" какого-нибудь уникъю ресурса, например фиксация id объекта в журнале забранных на обработку объектов). Поскольку такие "блокировки" объявляются внетранзакционно, обычно выставляется дефолтное время, за которое забравший должен "вернуть" помеченное в общее пользование. И если кто-то перебьёт [после истечения этого времени] заявку первого -- первому придёт сообщение "увы, вы опоздали". Это возможно, когда все части объекта меняются "через одно место" (в т.ч. -- выставляющее такую "блокировку"). Если это не так -- то от select for update [|nowait]всех частей объекта -- не уйти. ЗЫ а что сразу сериалайзебл ? репитбл рид тоже хороший уровень изоляции. Я даже немного пользовался, пока не появилась возможность свести алгоритм к совместимому с рид коммитед варианту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 16:04 |
|
||
|
Альтернатива SELECT FOR UPDATE NOWAIT
|
|||
|---|---|---|---|
|
#18+
этта, ясно, спасибо. з.ы. алгоритм требует сериэлайзбл - агрегировать столбец на момент времени и по результату принять решение какие новые записи сделать (в этой же таблице), которые, в свою очередь, влияют на результат агрегирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 16:37 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38865527&tid=1998214]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
213ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 493ms |

| 0 / 0 |
