locking v databazi - vlasni reseni

Radek Kanovsky rk na dat.cz
Pátek Září 13 20:31:09 CEST 2002


On Fri, Sep 13, 2002 at 07:08:54PM +0200, Jan Kubik wrote:

> S berkeley pracuji jiz nejakou dobu, nepouzival jsem doposud ani
> locking a ani transakce - neb system slouzi jako demo pro jednoho
> uzivatele. Pri mem hledani jsem na Vami uvedenou moznost narazil a
> napsal sadu testovacich programu (na zaklade berkeley prikladu).
> 
> 1.
> Ze by bylo potreba to mapovani , jsem nevyrozumnel.
> Priklad takoveho code-segmentu:
> 
> strcpy(objbuf,"LK"); strcat(objbuf,pkey);
> lock_type = DB_LOCK_READ;
> memset(&lock_dbt, 0, sizeof(lock_dbt));
> lock_dbt.data = objbuf;
> lock_dbt.size = strlen(objbuf);
> ret = dbenv->lock_get(dbenv, locker,0, &lock_dbt, lock_type, &lock);

Mate pravdu. Nevim, jak jsem na to mapovani prisel. Nepouzival jsem
to nikdy externe. Manual hovori jasne a bylo to tak i v predchozich
verzich. http://doc.uh.cz/SleepycatDB/DB-4.0.14/ref/lock/nondb.html

> ja jsem to pochopil tak, ze system zustane stat pri volani dbenv->lock_get,
> jestlize pro kombinaci locker/lock_dbt - object nekdo jiny jiz lock vyzadal
> ??
> ALE vzhledem k tomu, ze locking zavini blockadu cele tabulky jsem eventuelne
> uplne mimo -- mate Vy s tim zkusenosti ??

Myslim ze nezablokuje celou tabulku. Pokud je ve vasem prikladu "LK"
nazev tabulky a pkey je primarni klic, melo by to blokovat jenom jeden
zaznam, ne? Sleepycat v tomto pripade o zadne tabulce nevi.
Mozna nechapu presne dotaz.

> na druhou stranu, dovedete si predstavit jak je mozno JEDNOZNACNE
> prevest 20 Byte string na unsigned int ... ja vidim jen nejakou hash
> tabulku, ktera musi byt ale pro vsechny procesy jednoznacna ???

Asi zalezi na situaci ale mohlo by zafungovat i to nejednoznacne
mapovani. Jenom by se zamklo vic zaznamu, nez je potreba. Tabulka by
nebyla potreba, stacila by hashovaci funkce string -> int32.

Radek Kaňovský


Další informace o konferenci Test