[devel] вопрос про BDB и блокировки.
Alexey Tourbin
at на altlinux.ru
Пт Апр 27 15:02:31 MSD 2007
On Fri, Apr 27, 2007 at 03:38:52PM +0500, Sergey Y. Afonin wrote:
> On Friday 27 April 2007, Alexey Tourbin wrote:
>
> > DB_INIT_CDB дает "прозрачный" локинг для каждой операции.
> > То есто операция начинается берётся блокировка. Операция заканчивает
> > блокировка снимается.
> >
> > DB_INIT_LOCK по идее специально указывать не надо, если указано
> > DB_INIT_CDB|DB_INIT_MPOOL.
> >
> > Там есть ещё другой режим вместо локинга, он log может писать.
>
> Но этот другой режим - тоже режим блокировок ? Хочется понять, почему
> сейчас работает, когда нет явного указания на использование блокировок.
> Обязательно уже должно было несколько процессов к одной базе сунуться
> и не раз. Ан нет, пашет...
Скорее всего, не работает. Просто если чтение с записью
не пересекается, то это, может быть, прокатывает. Ну или там один в
базу записал а другой старую копию базы видит, и это работает, пока
постраничные данные не перезаписаны.
Режима два разных: либо блокировать всю базу (ну или там постранично),
либо писать write-ahead log (это транзакции, там сложнее уже). Либо
блокировать своими средствами.
Делайте как у меня, лучше пока ничего не придумано. :) Похожим образом
сделано в /usr/sbin/amavisd, только там BerkeleyDB::Env->new ничем не
блокируется. По-моему при одновременных попытках инициализировать evn
будет капут.
При использовании логинкга или DB_INIT_CDB очень важно сигналы правильно
заблокировать. /usr/share/doc/db-4.4.20/ref/program/appsignals.html
К сожалению в перле это делается проще чем в C.
----------- следущая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 189 байтов
Описание: отсутствует
Url : http://lists.altlinux.org/pipermail/devel/attachments/20070427/e195b193/attachment.bin
Подробная информация о списке рассылки Devel