[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