[pyar] Nombres unicos para tablas

Roberto Alsina ralsina en netmanagers.com.ar
Vie Jun 18 16:43:08 ART 2010


On Friday 18 June 2010 16:37:47 Ricardo Aráoz wrote:
> On 18/06/2010 04:35 p.m., Roberto Alsina wrote:
> > On Friday 18 June 2010 16:29:17 Lucio Torre wrote:
> >> 2010/6/18 Roberto Alsina<ralsina en netmanagers.com.ar>:
> >>> On Friday 18 June 2010 15:57:09 Lucio Torre wrote:
> >>>>> 1. sacar numero al azar
> >>>>> 2. ver que no se usa
> >>>>> 3. usarlo
> >>>> 
> >>>> Si ver que no se usa y usarlo no son operaciones atomicas alguien
> >>>> puede empezar a usarlo despues de tu chequeo y se rompen las cosas.
> >>>> Ahi abria que cambiar el loop a "reintentar si falla porque ya esta
> >>>> usado"
> >>> 
> >>> Aunque fueran atómicas hay una race condition. Lo que necesitarías que
> >>> sea atómica es "ver que no se usa y usarlo", y la forma fácil de hacer
> >>> eso es meterle un lock :-)
> >>> El loop no lo puse porque no hace falta para la race condition.
> >> 
> >> Por eso, la solucion seria:
> >> 
> >> 1- sacar un numero al azar
> >> 2- usarlo
> >> 
> >> :)
> > 
> > Y eso no te da numeros repetidos porque....
> 
> Dado que es dentro de una bd, por qué no usarla? Creás una
> tabla(nomUsados) con un campo caracter que sea también la clave
> primaria. Después inventás un nombre de tabla, y tratás de guardarlo en
> nomUsados, si no podés es porque está usado, si podés entonces ese
> nombre queda reservado para tu proceso, cuando terminás de usar el
> nombre lo borrás de nomUsados.

Para que **eso** no tenga race condition tenés que meterlo en una transacción. 
O sea... ponerle un lock alrededor ;-)



More information about the pyar mailing list