[devel] вопрос про BDB и блокировки.
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пт Апр 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.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20070427/e195b193/attachment-0001.bin>
Подробная информация о списке рассылки Devel