|
|
|
синхронизация доступа пользователей к объектам БД
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Ситуация такая: есть таблица «пользователи»(ID, Name) и таблица «файл»(ID, file). В таблице файл записи столбца file представляют из себя BLOB – файлы – чертежи Автокада. Необходимо синхронизировать доступ так, чтобы пользователь мог взять файл, если тот еще никем не взят, поработать с ним и вернуть в БД, сняв маркировку «взято». Хочу в таблицу «файл» добавить «ID пользователя», и если оно = 0, значит файл свободен, при взятии установить ID берущего пользователя и при записи обнулять это поле. Напишите, плиз, свои комментарии, дополнения и критику в адрес такого подхода. Может есть другие способы ограничения доступа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 09:17 |
|
||
|
синхронизация доступа пользователей к объектам БД
|
|||
|---|---|---|---|
|
#18+
В первую очередь прочитайте про средства блокировки, доступные в используемой БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 10:16 |
|
||
|
синхронизация доступа пользователей к объектам БД
|
|||
|---|---|---|---|
|
#18+
именно так это и реализовано в Documentum ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 10:26 |
|
||
|
синхронизация доступа пользователей к объектам БД
|
|||
|---|---|---|---|
|
#18+
softwarerВ первую очередь прочитайте про средства блокировки, доступные в используемой БД. По моему средства блокировки встроенные в БД не рекомендуется использовать для функциональных блокировок, вроде многократно обсуждалось. Пользователь взял документ, залочил строку, ушел пить чай, а потом selectы не идут. Я бы остановился на варианте таблицы блокировок, куда будут помещаться ИД блокированных документов, время блокировки и, может быть, намерения (просмотр, редактирование). По истечению определенного времени (час, 3, сутки) "протухшие" блокировки удалять. Если логика в middle-tier то таблицу хранить в памяти, например в коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 09:12 |
|
||
|
синхронизация доступа пользователей к объектам БД
|
|||
|---|---|---|---|
|
#18+
ShultzeПо моему средства блокировки встроенные в БД не рекомендуется использовать для функциональных блокировок, вроде многократно обсуждалось. Пользователь взял документ, залочил строку, ушел пить чай, а потом selectы не идут. Простите, но это из серии "слышал звон". Судя по профилю, Вы говорите о MSSQL, причем о его блокировках строк. Я не разбираюсь в MSSQL, но не так давно некто Merle при участии pkarklin рассказывали мне о наличии встроенного механизма для, как Вы говорите, функциональных блокировок, в MSSQL, не мешающих никаким селектам. ShultzeЯ бы остановился на варианте таблицы блокировок Безусловно, всегда интереснее делать велосипед своими руками. Но как ленивый человек, я бы скорее всего остановился на использовании dbms_lock ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 12:21 |
|
||
|
синхронизация доступа пользователей к объектам БД
|
|||
|---|---|---|---|
|
#18+
Статья на GotDotNet Тут обсуждение этой же проблемы Механизмы sp_getapplock ИМХО, недостаточно гибок, нет типизации по блокируемым ресурсам, нет возможности управлять пулом блокированных объектов, т.е. снять все заблокированные объекты без уничтожения сессии, нет возможности посмотреть кто заблокировал ресурс (sp_lock не информативен для APP блокировок). Велосипед из одной таблицы и нескольких ХП лично мне более удобен, чем то что предоставляется сервером. Опять же, блокировки можно вынести в слой сервера приложений и вообще базу не трогать. Кстати, Kostt, судя по профилю ваяет СУБД на MSSQL, а клиента на .NET. Что полностью согласуется с моими рекомендациями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 21:13 |
|
||
|
синхронизация доступа пользователей к объектам БД
|
|||
|---|---|---|---|
|
#18+
Вдогонку.. реализация увжаемым Pkarklin приводится в топике /topic/22318 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 21:17 |
|
||
|
синхронизация доступа пользователей к объектам БД
|
|||
|---|---|---|---|
|
#18+
Тут обсуждение этой же проблемы И говорится правильное решение - dbms_lock :) Механизмы sp_getapplock ИМХО, недостаточно гибок..... Тут - не могу и не хочу спорить. Имхо, это вполне соответствует указанному мной принципу - посмотреть средства, которые может предоставить сервер. И если они не подходят, приниматься за велосипед. Опять же, блокировки можно вынести в слой сервера приложений и вообще базу не трогать. И только ради этого вводить сервер приложений? :) Кстати, Kostt, судя по профилю ваяет СУБД на MSSQL, а клиента на .NET. Что полностью согласуется с моими рекомендациями. Если начинать закапываться в детали, то я не нашел в указанных Вами недостатках sp_*lock чего-то, что принципиально мешало бы указанному Kostt режиму работы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 22:55 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33588465&tid=1545376]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
7ms |
get forum data: |
3ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 499ms |

| 0 / 0 |
