Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 5, 2010 08:29:11

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLite в сети

Lexander
bialix
Файловые блокировки в 1С существенно сказываются на производительности. Причем, зависимость увеличения времени обработки 1-го справочника, документа от количества пользователей и объема БД - прямая.
Плюс проблемным местом именно под Вин является зависание или вылет клиента во время операций. Винда иногда забывает снять блокировку, даже если нет хозяина этой блокировки.
Речь идёт об обычных замках, создаваемых функцией LockFile/LockFileEx? Ну, это самые быстрые замки. Описанный мною метод намного медленнее, потому что требует больше операций.



Офлайн

#2 Янв. 5, 2010 11:10:48

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

SQLite в сети

bialix
Файл внутри каталога нужен чтобы предотвратить успешное переименовывание на Linux-платформе. В случае пустого каталога операция может закончиться успешно даже если каталог уже существует.
А почему нельзя просто создать каталог held без предварительных манипуляций? Насколько я помню mkdir - атомарная операция. Или на винде не так?

Если процесс-локер упал или висит, то любой процесс может разрушить замок.
Каким образом этот любой процесс поймет, что процесс-локер висит или упал? Или это ему не нужно знать?



Офлайн

#3 Янв. 5, 2010 12:40:54

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

SQLite в сети

u4upy
Именно сейчас нашему приложению безразлично, что там автор говорит.
У меня тоже самое… :)
Нагрузка примерно такая же. В основном чтение из базы идет.
Так же, после прочтения FAQ испугался. Подумывал даже небольшой враппер написать. Одно приложение будет запускаться в роли сервера, слушать сокет, принимать запросы, и возвращать например repr'нутые ответы.
Как такой вариант, имеет право на жизнь?



Офлайн

#4 Янв. 5, 2010 13:42:35

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

SQLite в сети

Александр, а где именно в коде bzr лежит реализация этих локов? Буквально сегодня потребовалось сочинить нечто подобное. Должно работать на NFS.



Офлайн

#5 Янв. 5, 2010 14:30:59

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

SQLite в сети

Интересное совпадение - мне тоже и тоже на NFS. У меня, как не странно, заработал fcntl.lockf, но я все равно опасаюсь.
Кстати, у меркуриала тоже что-то подобное есть. Но там на симлинках сделано, так что под виндой работать не будет, скорее всего.



Офлайн

#6 Янв. 5, 2010 15:09:18

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

SQLite в сети

а как же меркуриал на винде запускается?
lockf, наверное, можно в простых случаях - но хочется изучить все варианты. Ребята из bzr, как я думаю, набили на этом вопросе все возможные шишки.



Офлайн

#7 Янв. 5, 2010 15:49:47

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

SQLite в сети

Судя по коду если симлинки не поддерживаются ос, то создается файл таким образом: os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL)
Не уверен, что это будет работать под виндой на NFS шарах и нормально восприниматься скажем линухом с другой машины.



Офлайн

#8 Янв. 5, 2010 16:11:02

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

SQLite в сети

igor.kaist
Как такой вариант, имеет право на жизнь?
Стандартная 3-уровневая архитектура. :)
В качестве расширения существующей системы - несомненно можно и нужно использовать, а если создавать что-то новое, то я бы остановился на полноценной сетевой СУБД.
Впрочем, дополнительная предварительная оценка объема работ не помешает, т.к. все те механизмы, что вам нужно будет реализовать самому сейчас реализованы на уровне СУБД. Сами смотрите что вам будет быстрее и выгоднее: переделать все под сетевую СУБД или расширить текущую структуру системы.



Офлайн

#9 Янв. 6, 2010 11:06:17

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLite в сети

Андрей Светлов
Александр, а где именно в коде bzr лежит реализация этих локов? Буквально сегодня потребовалось сочинить нечто подобное. Должно работать на NFS.
bzrlib/lockdir.py (тесты: bzrlib/tests/test_lockdir.py)

Реализация блокировок через OS file locks в bzrlib/lock.py (тесты: bzrlib/tests/per_lock/).



Офлайн

#10 Янв. 6, 2010 11:14:54

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLite в сети

Ed
bialix
Файл внутри каталога нужен чтобы предотвратить успешное переименовывание на Linux-платформе. В случае пустого каталога операция может закончиться успешно даже если каталог уже существует.
А почему нельзя просто создать каталог held без предварительных манипуляций? Насколько я помню mkdir - атомарная операция. Или на винде не так?

Если процесс-локер упал или висит, то любой процесс может разрушить замок.
Каким образом этот любой процесс поймет, что процесс-локер висит или упал? Или это ему не нужно знать?
На винде mkdir тоже атомарная операция. А вот как на Линуксе с этим? Создатель библиотеки lockfile (см. на pypi) утверждает, что для Линукса более правильным решением является использование link. Признаюсь, что в потрохах Линукса я не спец.

Каким образом любой процесс поймет? А как обычно: либо использовать приблизительное максимальное время для операции, или спросить пользователя программы, которая создала замок (Эй, у тя прога работает или висит?).

Например, если замок был создан вчера и до сих пор не разрушен, значит что-то не так. Временную дельту можно подобрать как-то опытным путём.

Можно выдать диалог-запрос пользователю: “слышь чувак, база залочена тем-то и тем-то тогда-то (ХХХ часов назад). Чё делать бум? Может сами разрушим замок, ась?”

Ну а какие еще варианты? У вас что проги виснут/падают каждые 15 минут? Даже страшные рассказы про BSOD как-то не впечатляют уже.



Отредактировано (Янв. 6, 2010 11:17:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version