|
|
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
Привет Всем! Платформа Win32, Как в файл-сервере можно сделать многопользовательские блокировки? Тоесть возмьем например MS-Access. Они позволяют шарить файл БД по локалке и одновременно работать с ним разным пользователям. Какое АПИ они используют для блокировки участков файла и какие паттерны взаимодействия и блокировок при работе? Меня интересуют различные варианты решения этой задачи. Всем Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 15:03 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
shuklinПлатформа Win32, Как в файл-сервере можно сделать многопользовательские блокировки?...... Обычно, практически любой файл-сервер реализует данный функционал. Различают физические блокировки: на весь файл и на участок файла. Порой, что бы разруливать клинчи - над физической блокировкой делают (могут делаться) логические блокировки. Данным подходом пользуется DBF "формат". Пример... Физическая блокировка байта, со смещением.. 0x80000000 = блокирует весь файл... Физическая блокировка байта со смещением.. 0x80000000 + Nзаписи = блокирует конкретную запись в файле... с уважением (круглый) ЗЫ Блокировки поддерживаются фатами, энтээфэсами.. Под досами, виндами, новеллами и т.д.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 15:32 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
kolobok0Обычно, практически любой файл-сервер реализует данный функционал. Собственно в этом то и вопрос. Любой как раз не нужен. Нужно написать свой. Дабы уменьшить степень велосипедности при его написании поднял вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 15:36 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
shuklinДабы уменьшить степень велосипедности при его написании поднял вопрос. Вы указали Win32. Она базируеться на фатах, либо энтээфэсах. Там блокировки от родясь и живут... Любой апи по файловому доступу Вам поможет... либо я не догоняю тонкости вопроса... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 15:40 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
kolobok0Любой апи по файловому доступу Вам поможет... либо я не догоняю тонкости вопроса... Ну "любой апи" подразумевает наличие нескольких вариантов. Тот же LockFile или LockFileEx - что лучше? А может есть что то еще лучше? Потом от блокировки региона до многопользовательской БД есть некоторое расстояние. Так как принято пользоваться регионами? Каковы общепринятые паттерны и сиквенсы использования этих средств в файл - серверной БД? Какие вообще есть подходы к блокировке? Можно ведь блокировки отдельным файлом хранить (похоже для этого Access ldb рядом создает?) Или блокировать на прямую сам файл с данными .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 16:07 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
Вот скажем решу я использовать отдельный файл с картой check-in - check-out - паттерн будет простой. заблокировать - проверить стоит ли 1 если нет установить - разблокировать. тут же проблема - а что если клиент умрет. ведь блокировка умрет с клиентом, а не 1 в карте ... а если блокировать файл с данными, то на 100000 строк, может быть до 100000 разных блокировок, - это ж любую ОС замучит до невменяемости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 16:14 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
shuklin...тут же проблема - а что если клиент умрет. ведь блокировка умрет с клиентом, а не 1 в карте ...... тут фигня следующая... ну во первых напрашиваеться вопрос - а нафига не использовать нечто большее чем файловый сервис...но этот вопрос опустим... задаваясь теми вопросами, что озвучили Вы - становиться понятно, что нуна помимо блокировок ышо нечто отвечающее на вопрос - а жив ли пациент ? Приходилось и такой кулич лепить... было дело...правда не на файловом сервисе, но суть не меняеться... Использовались глобальные семафоры от новелла. В принцепе механизация не важна - сосредоточиться прошу на самой идеи... смысл следующий... есть некий ресурс однозначно идентифицирующиеся в сети и проассоциировано с блокировкой какой либо станции. этот ресурс имеет состояния и ссылку на следующий... поведение станции простое: станция ищет хвост таких ресурсов (если имеются) и контролирует последний. Тот в свою очередь должен изменять состояние раз в некий интервал времени. сама станция создаёт свой ресурс, ссылающийся на последний и отслеживая интервалы времени меняя его состояние. получаеться очередь "дышащих" неких ресурсов. В случаи сбоя (умер) - рабочая станция берёт идентификатор ресурса "отца" умершего, если и он "приказал" - следующий и так до головы. Если очередь пуста (дошли до головы) - мы имеем право на доступ к файлу..записали что хотели - ничего не делаем (либо просигналили хвосту, что отпустили - для оптимизации)... данная логическая блокировка - позволяет отслеживать работоспособность станций стоящих (заблокировавших) Ваш файл. данная метода была успешно применена при работе в сети, без выделенного файл сервера, ресурсами выступали (как уже было сказано) - глобальные семафоры Novell... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 17:53 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
kolobok0сосредоточиться прошу на самой идеи... смысл следующий... Спасибо! Вот как раз узнать у народа, кто с подобными задачами сталкивался, и общие идеи их решения, детальнее то оно и не нужно, и хотел в результате этого обсуждения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 18:15 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
kolobok0В случаи сбоя (умер) - рабочая станция берёт идентификатор ресурса "отца" умершего, если и он "приказал" - следующий и так до головы. Тоесть каждая станция при подключении должна опростить всю эту очередь и собрать инфу, кто перед ней в очереди за кем стоит - иначе ведь, если тот за кем стоим умер, уже не узнать за кем стоял он. И тут нужно иметь способность общаться двум разным станциями. А я бы хотел обойтись только файловыми блокировками, без открытия сетевых соединений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 18:20 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
shuklinТоесть каждая станция при подключении должна опростить всю эту очередь и собрать инфу, кто перед ней в очереди за кем стоит - иначе ведь, если тот за кем стоим умер, уже не узнать за кем стоял он. И тут нужно иметь способность общаться двум разным станциями. А я бы хотел обойтись только файловыми блокировками, без открытия сетевых соединений. опрашивать нужно последнего на предмет жив-не жив. признак жизни - его динамическое изменение во времени. общаться нужно не с танциями а с ресурсами...если Вы в своих рассуждениях говорите о файл-сервере, то аллокировать ресурсы можно на нём. какие именно и как - ну тут дело фантазии. напрашиваеться файловый сервис... пример (как одно из решений. даже не решений - а что первое зашло в голову. на семафорах просче конечно же :) )... каждая рабочая станция имеет свой уникальный идентификационный номер. данный номер ставиться в соответствие с указателем на ячейку в неком файле управления.каждой ячейке соответствует указатель на ячейку парента, переключаемый признак жив-не жив. в заголовке файла прописано начало очереди и ей конец... вроде так.. (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 14:54 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
kolobok0 вроде так.. Идею понял. Спасибо. Возмжно, что признак жив-нежив я смогу реализовать на основе LockFile - она отпускает ячейку в файле при смерти клиента - не понадобяться мигалки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 18:35 |
|
||
|
Реализация файл-сервера.
|
|||
|---|---|---|---|
|
#18+
Некоторые серверы закрывают соединение при превышении порога молчания. Кроме того сервер не обязан физически лочить разделяемый ресурс, он может не пускать запрос в зависимости от дескриптора ресурса. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 18:50 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33485217&tid=2032117]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
141ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 456ms |

| 0 / 0 |
