Re: modos de bloqueo

From: "Ivan Perales M(dot)" <ivan(dot)perales(at)gmail(dot)com>
To: Kernel <jucabapa(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: modos de bloqueo
Date: 2016-04-21 16:14:00
Message-ID: CAHMuS074nXcHYaGNjYmGFCPM8+h0ck6puUjSoOqtbtvP1wkuoQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Imaginate si a un cliente le van a hacer 100 facturas y a otro solo 1, pero
el de 100 empezo primero, lo obligarás a esperarse el tiempo que tarde
hacen esas 100 en lugar de solo el tiempo que tarde hacer la de el?.

El método que te propuse lo puedes adaptar para que te aparte un rango de
folios.

En fin, suerte.

2016-04-21 11:06 GMT-05:00 Kernel <jucabapa(at)gmail(dot)com>:

> El 21/04/2016 a las 16:39, Ivan Perales M. escribió:
>
>> Yo también creo que tu problema es una solución más por software que por
>> la base de datos.
>> Pero ahora, la pregunta sería, ¿el número de factura debe ser
>> consecutivo?, si a un cliente se le van a hacer 100 facturas, y a otro
>> solo 2, al primer cliente le deben de salir del 1 al 100 y al segundo
>> del 101 al 102?, o puede ser posible que al cliente 1 le salgan del 1 al
>> 102 y al cliente por ahi del 35 y 47, eso es factible? Por que si esto
>> si lo es, yo creo que lo que deberias tener es un método exclusivo que
>> ye este regresando el folio. Despues de hacer todas las validaciones en
>> el método que crea la factura y ya lo único que queda es guardarla en la
>> base de datos, en ese momento deberias llamar a éste método exclusivo
>> (que debe crear una transaccion independiente) y que debe estar
>> preparado para ser llamado desde diferentes threads, encolando las
>> peticiones, asi el método exclusivo checa cual es el siguiente folio,
>> actualiza la tabla y lo retorna, las siguientes peticiones entonces
>> siempre recibirán el siguiente único. La ventaja de esto es que puedes
>> agregar un parámetro adicional como la serie para obtener el folio.
>>
>> 2016-04-21 9:14 GMT-05:00 Jaime Casanova <jaime(dot)casanova(at)2ndquadrant(dot)com
>> <mailto:jaime(dot)casanova(at)2ndquadrant(dot)com>>:
>>
>> 2016-04-21 8:03 GMT-05:00 Hellmuth Vargas <hivs77(at)gmail(dot)com
>> <mailto:hivs77(at)gmail(dot)com>>:
>>
>> > Hola Lista
>> >
>> > Quisiera que aclaráramos y dividiéramos el problema en cuestión:
>> la
>> > necesitad del bloqueo es por los Item o artículos que hacen parte
>> de la
>> > factura para que otro cliente nos los vaya a tomar nuestros
>> artículos
>> > mientras se efectúa la factura o es por el numero de la factura?
>> Porque
>> > según estoy entendiendo en el hilo de la discusión el tema es el
>> numero de
>> > facturación, si es así no hay necesidad de bloquear las tablas,
>> el tema es
>> > con la secuencia que genera el numero de factura, que no debe
>> tener saltos,
>> > debe ser consecutivo, debe ser UNICO, que debe corresponder a un
>> rango
>> > valido, etc. etc y el enfoque es diferente para lograr esto de
>> forma
>> > concurrente.
>> >
>>
>> El problema de usar secuencias es que si puede haber saltos, por
>> ejemplo si
>> se cancela la operación luego de haber tomado un valor de la
>> secuencia.
>> Pero el otro problema que podría haber, o al menos a mi me paso en
>> Ecuador,
>> es que el gobierno nos obligaba a imprimir un formato especifico en
>> una
>> imprenta y nosotros debíamos usar ese formato llenando los espacios en
>> blanco pero la imprenta ya debía darte los números de las facturas así
>> que si tenias varias personas facturando debías asegurarte que
>> terminen las
>> transacciones en el orden correcto para que coincidan con los
>> números fisicos
>> de la factura.
>>
>> Por supuesto, existe más de una manera de solventar ese problema pero
>> el
>> problema existe. Y seguramente hay variantes del mismo problema en
>> otras partes.
>>
>> --
>> Jaime Casanova www.2ndQuadrant.com <http://www.2ndQuadrant.com>
>> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>>
>> -
>> Enviado a la lista de correo pgsql-es-ayuda
>> (pgsql-es-ayuda(at)postgresql(dot)org <mailto:pgsql-es-ayuda(at)postgresql(dot)org
>> >)
>> Para cambiar tu suscripción:
>> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>>
>>
>>
>>
>> --
>> Lindolfo Iván Perales Mancinas
>> Solo existen 10 tipos de personas en el mundo, las que saben binario y
>> las que no.
>>
>
> Las facturas tienen que ser correlativas , sin saltos y por supuesto la
> fecha de una factura no puede ser menor que una con numero superior.
>
> Voy a utilizar el select for update con la clausula nowait a una tabla que
> voy a crear para el proceso, asi puedo bloquear por empresa,serie.
> No voy a hacer el select for update a la propia tabla de series, por que
> en el mismo registro esta el ultimo numero de
> factura,albaran,pedido,presupuesto, orden de fabricacion y bloquearia
> muchos procesos.
>
> Voy a leer el ultimo numero de factura al principio, lo incrementare en
> memoria y solo escribiré en el fichero de series al final, justo antes del
> commit, creo que es la mejor solución ..
>
>
>
>

--
Lindolfo Iván Perales Mancinas
Solo existen 10 tipos de personas en el mundo, las que saben binario y las
que no.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jorge Gonzalez 2016-04-21 16:19:49 Re: modos de bloqueo
Previous Message Kernel 2016-04-21 16:06:38 Re: modos de bloqueo