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

Если процесс-локер упал или висит, то любой процесс может разрушить замок.
Каким образом этот любой процесс поймет, что процесс-локер висит или упал? Или это ему не нужно знать?
igor.kaist
u4upy
Именно сейчас нашему приложению безразлично, что там автор говорит.
У меня тоже самое… :)
Нагрузка примерно такая же. В основном чтение из базы идет.
Так же, после прочтения FAQ испугался. Подумывал даже небольшой враппер написать. Одно приложение будет запускаться в роли сервера, слушать сокет, принимать запросы, и возвращать например repr'нутые ответы.
Как такой вариант, имеет право на жизнь?
Андрей Светлов
Александр, а где именно в коде bzr лежит реализация этих локов? Буквально сегодня потребовалось сочинить нечто подобное. Должно работать на NFS.
Ed
Интересное совпадение - мне тоже и тоже на NFS. У меня, как не странно, заработал fcntl.lockf, но я все равно опасаюсь.
Кстати, у меркуриала тоже что-то подобное есть. Но там на симлинках сделано, так что под виндой работать не будет, скорее всего.
Андрей Светлов
а как же меркуриал на винде запускается?
lockf, наверное, можно в простых случаях - но хочется изучить все варианты. Ребята из bzr, как я думаю, набили на этом вопросе все возможные шишки.
Ed
Судя по коду если симлинки не поддерживаются ос, то создается файл таким образом: os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL)
Не уверен, что это будет работать под виндой на NFS шарах и нормально восприниматься скажем линухом с другой машины.
Lexander
igor.kaist
Как такой вариант, имеет право на жизнь?
Стандартная 3-уровневая архитектура. :)
В качестве расширения существующей системы - несомненно можно и нужно использовать, а если создавать что-то новое, то я бы остановился на полноценной сетевой СУБД.
Впрочем, дополнительная предварительная оценка объема работ не помешает, т.к. все те механизмы, что вам нужно будет реализовать самому сейчас реализованы на уровне СУБД. Сами смотрите что вам будет быстрее и выгоднее: переделать все под сетевую СУБД или расширить текущую структуру системы.
bialix
Андрей Светлов
Александр, а где именно в коде bzr лежит реализация этих локов? Буквально сегодня потребовалось сочинить нечто подобное. Должно работать на NFS.
bzrlib/lockdir.py (тесты: bzrlib/tests/test_lockdir.py)

Реализация блокировок через OS file locks в bzrlib/lock.py (тесты: bzrlib/tests/per_lock/).
bialix
Ed
bialix
Файл внутри каталога нужен чтобы предотвратить успешное переименовывание на Linux-платформе. В случае пустого каталога операция может закончиться успешно даже если каталог уже существует.
А почему нельзя просто создать каталог held без предварительных манипуляций? Насколько я помню mkdir - атомарная операция. Или на винде не так?

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

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

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

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

Ну а какие еще варианты? У вас что проги виснут/падают каждые 15 минут? Даже страшные рассказы про BSOD как-то не впечатляют уже.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB