Alberto Cuevas escribió:
> Exacto! lo que dice Alvaro es el problema que quiero evitar.
> 
> Bueno he decidido tener el stock separado, vere como me va.

Hm, hasta donde veo, tener el stock separado no te va a resolver el
problema.  Si sólo quieres leer el stock actual, da lo mismo si hay un
update o no lo hay en una tabla o en la misma tabla (MVCC significa que
lectores no son bloqueados por escritores).  Si quieres actualizar el
stock (vender un producto) da lo mismo si están en la misma tabla o en
otra tabla: se bloquearán igual (un update tendrá que esperar a que el
otro haga commit/rollback en cualquiera de los dos casos)

IMO si quieres resolver ese problema de forma concurrente el diseño que
te sirve es el de una tabla con deltas, donde tienes una fila que
indica el total y varias filas que indican cambios al total
(agregar/quitar), y para saber el actual tienes que sumar todas esas
fiilas.  Así puedes agregar una nueva fila de "quitar" cuando vendes, y
varios procesos pueden agregar esas filas concurrentemente (e insertas
una fila "agregar" cuando te llega stock nuevo del proveedor).  Cada una
hora (o algo así) un proceso en background hace la suma total y borra
todos los deltas, haciendo un update de la fila del total (para evitar
proliferación de excesivas filas "delta").

Ahí no se bloquea nadie, aunque para saber "el stock actual" tienes que
considerar aquellos procesos que estén en ejecución concurrentemente.

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a