|
|
|
jdbc, hibernate и пул соединений к Oracle
|
|||
|---|---|---|---|
|
#18+
День добрый! Потихоньку разбираюсь с web программированием и столкнулся с некоторым концептуальным недопониманием использования пула соединений к СУБД. Т.к. пул соединений предполагает что неизвестно какая сессия к СУБД будет получена текущим пользователем для работы, то использование временных таблиц в данном случае невозможно. Правильно? Так же, как я понимаю, невозможно использовать блокировку документа для эксклюзивного доступа к нему. Если как-то best practics для, скажем, такой ситуации: мне нужно открыть документ для его изменений (при этом я должен быть уверен что никто больше его не поменяет). Я вношу в документ некоторые изменения (меняю его шапку или может даже наполнение другими документами), и только при сохранении все изменения накатываются в БД (хотелось бы что бы вносимые мной изменения так же находились в БД для возможности join`а справочников или других операций). После того как я его закрыл документ доступен другим пользователям. или этот процесс стоит организовать по-другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 20:24 |
|
||
|
jdbc, hibernate и пул соединений к Oracle
|
|||
|---|---|---|---|
|
#18+
В многопользовательских приложениях это реализуется через Optimistic Lock. Каждый апдейт документа инкрементирует версию. Если сохраняемая версия окажется старее, чем текущая в базе, то будет ошибка блокировки. Такое решение позволяет избежать длинных транзакций в многопользовательской системе. Но если у вас intranet приложение. Количество пользователей ограничено, а БД дорогая и модная, тогда уже можно смотреть на альтернативные возможности этой БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 21:10 |
|
||
|
jdbc, hibernate и пул соединений к Oracle
|
|||
|---|---|---|---|
|
#18+
On 24.07.2014 21:24, lLocust wrote: > Потихоньку разбираюсь с web программированием и столкнулся с некоторым > концептуальным недопониманием использования пула соединений к СУБД. Интересное начало. Казалось бы, причём тут WEB? > Т.к. пул соединений предполагает что неизвестно какая сессия к СУБД > будет получена текущим пользователем для работы, то использование > временных таблиц в данном случае невозможно. Правильно? Неправильно. > Так же, как я понимаю, невозможно использовать блокировку документа для > эксклюзивного доступа к нему. Понимаешь неправильно. > Если как-то best practics для, скажем, такой ситуации: > мне нужно открыть документ для его изменений (при этом я должен быть > уверен что никто больше его не поменяет). Есть так называемые "блокировки уровня приложения", они бы подошли тут максимально. Это, в общем, блокировки сущностей уровня приложения, которые выполняются тоже на уровне приложения. Т.е. ты их реализуешь сам. У тебя есть сессии, пользователи, и объекты (документы), так вот, ты в каке-то место записываешь, что пользователь такой-то в такой-то сессии заблокировал такой-то документ(ы). Соответственно, при каждом изменении проверяешь, что этот пользователь в этой сессии имеет блокировку. > Я вношу в документ некоторые изменения (меняю его шапку или может даже > наполнение другими документами), и только при сохранении все изменения > накатываются в БД (хотелось бы что бы вносимые мной изменения так же > находились в БД для возможности join`а справочников или других операций). > После того как я его закрыл документ доступен другим пользователям. > или этот процесс стоит организовать по-другому? Это уже вообще чисто в предметной области задача. Нужно сохранять журналы изменений -- сохраняй. На самом деле никто такой хренью не занимается чаще всего, но если надо -- реализуй. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 22:13 |
|
||
|
jdbc, hibernate и пул соединений к Oracle
|
|||
|---|---|---|---|
|
#18+
lLocustмне нужно открыть документ для его изменений (при этом я должен быть уверен что никто больше его не поменяет). над этим подумай. Раньше 1С тоже хотела....ещё круче - всю таблицу заблокировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 23:35 |
|
||
|
jdbc, hibernate и пул соединений к Oracle
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо. Petro123, Вы тоже намекаете на оптимистическую блокировку? MasterZiv> Т.к. пул соединений предполагает что неизвестно какая сессия к СУБД > будет получена текущим пользователем для работы, то использование > временных таблиц в данном случае невозможно. Правильно? Неправильно. > Так же, как я понимаю, невозможно использовать блокировку документа для > эксклюзивного доступа к нему. Понимаешь неправильно. А что именно я не правильно понимаю? Ведь если я не ошибаюсь, то если я что-то запишу во временные таблицы (или заблокирую запись), то либо должен использовать длинные транзакции (т.е. удерживать соединение с БД за собой) либо есть вероятность что это соединение будет отдано другому пользователю.... авторЕсть так называемые "блокировки уровня приложения", они бы подошли тут максимально. Это, в общем, блокировки сущностей уровня приложения, которые выполняются тоже на уровне приложения. Т.е. ты их реализуешь сам. У тебя есть сессии, пользователи, и объекты (документы), так вот, ты в каке-то место записываешь, что пользователь такой-то в такой-то сессии заблокировал такой-то документ(ы). Соответственно, при каждом изменении проверяешь, что этот пользователь в этой сессии имеет блокировку. Как вариант, спасибо. автор> Я вношу в документ некоторые изменения (меняю его шапку или может даже > наполнение другими документами), и только при сохранении все изменения > накатываются в БД (хотелось бы что бы вносимые мной изменения так же > находились в БД для возможности join`а справочников или других операций). > После того как я его закрыл документ доступен другим пользователям. > или этот процесс стоит организовать по-другому? Это уже вообще чисто в предметной области задача. Нужно сохранять журналы изменений -- сохраняй. На самом деле никто такой хренью не занимается чаще всего, но если надо -- реализуй. Не понял, при чем тут "журнал изменений"? я говорил про конкурентный доступ к документам. Вообщем как понял есть 2 основных направления обеспечения конкурентного доступа при использовании пула соединений: - Оптимистическая блокировка - Реализация блокировок на уровне приложения Угу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2014, 11:07 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38705441&tid=2126845]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 506ms |

| 0 / 0 |
