generator neprerusovane rady cisel

David Zabensky zabensky na ica.cz
Pondělí Únor 11 14:48:04 CET 2002


Karel Zak wrote:
> On Mon, Feb 11, 2002 at 02:06:04PM +0100, David Zabensky wrote:
> 
>>Preji dobre odpoledne,
>>
>>v souvislosti s nedavnou diskuzi o sekvencich v pgsql jsem se chtel
>>zeptat, jestli nekoho nenapadlo reseni $subj. Sekvence mi nezarucuji,
>>ze generovana rada cisel nebude obsahovat mezery (viz rollback
>>v transakci). Reseni na urovni tabulky s poslednim ID ma rovnez sve
>>uskali v pripade cteni (a nasledne incrementace ID) vice procesy
>>zaroven... Napada nekoho nejake elegantni reseni nad DB?
>>
>>Nejak me nic nemuze napadnout, resp. vzdycky prijdu na nejakou
>>slabinu. DB je pgsql.
>>
> 
>  Udelat si vlastni sequence. Sequence je tabulka s jednou radkou ze
>  ktere se precte, pouzije a zvetsite cislo. Pokud si udelate to same
>  + nejake funkce ktere vam vrati dane cislo a budete-li tu tabulku
>  drsne zamykat tak by nemelo dojit k mezeram. Pochopitelne to bude
>  rychlostne uzke hrdlo dane aplikace. 
> 
>         Karel
> 
> 

no jde o to, ze pokud budu mit vice soubeznych procesu jenz pojedou pod transakcema a udelam
si neco takoveho jako select next_id from tbl a pote update next_id = next_id + 1. (ci naopak), tak:

a) pokud budu mit vice procesu zaroven, vsechny dostanou zrejme stejnou hodnotu next_id platnou pro
zacatek transakce. tu budou nasledne zvysovat o 1 a dostanu (napr. 3x) stejne ID. Coz je spatne.

b) pokud tohle budu opakovat v nejakem PLSQL cyklu (v ramci 1 transakce) o neznamem poctu opakovani,
(for ...) bude v tom teprve zmatek. mozna to chapu spatne, ale u tohoto reseni ma kazdy backend 
svoji vlastni privatni kopii dat nad tabulkou se sekvenci, ne? a veskere zmeny jsou ostatnim 
neviditelne dokud neprovedu commit. tj. ostatni nevidi jake mam aktualni pouzivane ID.

c) jak zjistim, ze nejake vygenerovane ID (tj. jenz bylo precteno) bylo opravdu pouzito (tj. klient
pozdeji nevolal rollback)?? navic ty cisla by nemely byt ID jako takove, mel by se z nich generovat 
obecny text podle ruznych sablon (to ale s problemem nesouvisi).

problem je prave v tom, ze ta rada musi byt bez mezer, jinak bych se neptal ;-)

diky david



Další informace o konferenci Databases