[pyar] Nombres unicos para tablas

Ricardo Aráoz ricaraoz en gmail.com
Vie Jun 18 16:45:39 ART 2010


On 18/06/2010 04:43 p.m., Roberto Alsina wrote:
> 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 ;-)
>    

En realidad la bd resuelve "eso" sola. Y creo que no necesitás una 
transacción. Es un simple insert en la bd que puede tener éxito o no, si 
no lo tiene probás con otro nombre, no veo para qué la transacción (no 
estoy grabando multiples registros relacionados de forma atómica, es 
sólo uno).




More information about the pyar mailing list