Probaste con postgres-xc? Es un postgres modificado para usarse en entornos distribuidos, con soluciones nativas de replicacion y balanceo. Tal vez pueda ser util aqui.
http://sourceforge.net/projects/postgres-xc/ Saludos, Gerardo ----- Mensaje original ----- > De: "Hellmuth Vargas" <hiv...@gmail.com> > Para: "Lista Postgres ES" <pgsql-es-ayuda@postgresql.org> > Enviados: Viernes, 30 de Enero 2015 6:27:22 > Asunto: [pgsql-es-ayuda] Fwd: consulta sobre sequencias globales de BDR > > > > Hola lista > > No llego el anterior correo, lo reenvío.. > ---------- Mensaje reenviado ---------- > De: "Hellmuth Vargas" < hiv...@gmail.com > > Fecha: ene 29, 2015 2:49 AM > Asunto: consulta sobre sequencias globales de BDR > Para: "Lista Postgres ES" < pgsql-es-ayuda@postgresql.org > > Cc: > > > > Hola Lista: > > > Estoy realizado pruebas con BDR de PostgreSQL anunciado > recientemente, comparto una hilo de conversación que sostuve con > Jaime Casanova, entre otros, sobre el tema especifico del > comportamiento de secuencias globales. La inquietud surge porque > trabajo en un call center donde se realizan miles de transacciones > por segundo de diferentes clientes a un único cluster de base de > datos PostgreSQL (con replicacion asincronica obviamente), y por > balanceo de carga, disponibilidad, seguridad entre otros, seria > extraordinario contar con la replicacion multimaster. > > > ------------------------------------------------------------------------------------------------------------------ > > > > Buenos días > > > Actualmente me encuentro realizando una prueba con BDR, para esto he > seguido las pautas descritas en > > > https://wiki.postgresql.org/wiki/BDR_Quick_Start > > > luego ejecute las siguientes sentencias: > > > > bdrdemo=# CREATE SEQUENCE seq_tabla2 USING bdr; > CREATE SEQUENCE > > > > bdrdemo=# create table prueba2(id bigint primary key default > nextval('seq_tabla2'), origen text); > CREATE TABLE > --servidor 1 > > bdrdemo=# insert into prueba2(origen) select 'AAAA' from > generate_series(0,1) as a(id); > INSERT 0 2 > > > > --servidor 2 > > bdrdemo=# insert into prueba2(origen) select 'BBBB' from > generate_series(0,1) as a(id); > INSERT 0 2 > > > > > -- Acontinuación envío estas dos sentencias cada una en cada uno de > los servidores: > > > --servidor 1 > > > > > bdrdemo=# insert into prueba2(origen) select 'AAAA' from > generate_series(0,20000) as a(id); > ERROR: could not find free sequence value for global sequence > public.seq_tabla2 > HINT: The sequence is refilling from remote nodes. Try again soon. > Check that all nodes are up if the condition persists. > > > --servidor 2 > > > bdrdemo=# insert into prueba2(origen) select 'BBBB' from > generate_series(0,20000) as a(id); > ERROR: could not find free sequence value for global sequence > public.seq_tabla2 > HINT: The sequence is refilling from remote nodes. Try again soon. > Check that all nodes are up if the condition persists. > > > > > y genera el error que hay se presenta, toca esperar un buen tiempo > para que vuelva a estar disponible > > > -- servidor 1 > > bdrdemo=# select nextval('seq_tabla2'); > ERROR: could not find free sequence value for global sequence > public.seq_tabla2 > HINT: The sequence is refilling from remote nodes. Try again soon. > Check that all nodes are up if the condition persists. > bdrdemo=# select nextval('seq_tabla2'); > ERROR: could not find free sequence value for global sequence > public.seq_tabla2 > HINT: The sequence is refilling from remote nodes. Try again soon. > Check that all nodes are up if the condition persists. > bdrdemo=# select nextval('seq_tabla2a'); > nextval > --------- > 10001 > (1 row) > > > > > -- servidor 2 > > > > bdrdemo=# select nextval('seq_tabla2'); > ERROR: could not find free sequence value for global sequence > public.seq_tabla2 > HINT: The sequence is refilling from remote nodes. Try again soon. > Check that all nodes are up if the condition persists. > bdrdemo=# select nextval('seq_tabla2'); > nextval > ---------- > 14314001 > (1 row) > > > > > > > -- pero trato nuevamente de enviar el insert masivo y vuelve a > generar error: > > > -- servidor 1 > > > > > bdrdemo=# insert into prueba2(origen) select 'AAAA' from > generate_series(0,20000) as a(id); > ERROR: could not find free sequence value for global sequence > public.seq_tabla2 > HINT: The sequence is refilling from remote nodes. Try again soon. > Check that all nodes are up if the condition persists. > > > > > -- servidor 2 > > > bdrdemo=# insert into prueba2(origen) select 'BBBB' from > generate_series(0,20000) as a(id); > ERROR: could not find free sequence value for global sequence > public.seq_tabla2 > HINT: The sequence is refilling from remote nodes. Try again soon. > Check that all nodes are up if the condition persists. > > > > > La pregunta es si este comportamiento es normal? o debo configurar > algo adicional o estoy haciendo algo mal? LE agradezco de antemano > su atención, colaboración y tiempo > > > > > > ---------------------------------------------------------------------------------------------------------------------- > Jaime Casanova respondio: > > > > ---------- Forwarded message ---------- > > From: Hellmuth Vargas > > To: > > Cc: > > Date: Mon, 26 Jan 2015 21:49:55 -0500 > > Subject: consulta sobre BDR > > > [...] > >> > >> -- servidor 1 > >> > >> bdrdemo=# insert into prueba2(origen) select 'AAAA' from > >> generate_series(0,20000) as a(id); > >> ERROR: could not find free sequence value for global sequence > >> public.seq_tabla2 > >> HINT: The sequence is refilling from remote nodes. Try again soon. > >> Check that all nodes are up if the condition persists. > >> > >> > >> -- servidor 2 > >> bdrdemo=# insert into prueba2(origen) select 'BBBB' from > >> generate_series(0,20000) as a(id); > >> ERROR: could not find free sequence value for global sequence > >> public.seq_tabla2 > >> HINT: The sequence is refilling from remote nodes. Try again soon. > >> Check that all nodes are up if the condition persists. > >> > >> > >> La pregunta es si este comportamiento es normal? o debo configurar > >> algo adicional o estoy haciendo algo mal? Le agradezco de > >> antemano su atención, colaboración y tiempo. Mil Gracias > >> > > Si. Completamente normal. Como se explica en > https://wiki.postgresql.org/wiki/BDR_Global_Sequences las secuencias > globales deben coordinarse entre todos los nodos y eso toma tiempo. > > Opciones que se sugieren: > - Secuencias locales, con un offset. Algo como: DEFAULT (('2' || > nextval(secuencia))::bigint) > - UUID > - Una llave natural coordinada externamente > > > > ------------------------------------------------------------------------------------------------------------- > > > 2015-01-28 9:33 GMT-05:00 Hellmuth Vargas : > > Buenos días Jaime > > > > Ups!! Osea que aún no es aconsejable para entornos de inserción > > /actualización con mucha concurrencia... Voy a explorar las > > alternativas > > que me indica.. Le agradezco mucho su tiempo y atención!!! > > > > No creo que ese comportamiento vaya a cambiar, con secuencias > globales > (secuencias unicas en *todos* los nodos) tienes dos alternativas: > 1.- Cada nodo escoge un id que se garantice uno único cada vez, lo > que > implica bloquear la secuencia temporalmente en los otros nodos > mientras se sincroniza, y es casi seguro que habrá conflictos > frecuentes (por ejemplo si dos nodos incrementan la secuencia al > mismo > tiempo) a menos que haya un coordinador que causa aun mas problemas. > > 2.- Se reserva un rango de id's para cada nodo y solo es necesario > molestar a los otros nodos cuando se requiere solicitar un nuevo > rango. En ese caso pasará un momento para que la secuencia este > disponible otra vez. > > Me parece a mi que no tiene mucho sentido usar secuencias globales > para cosas que incrementan de ese modo, pero no tendrás problemas con > cosas como id de cliente y cosas así porque no ingresas 1 cliente > cada > segundo. > > En documentos igual no quieres usar secuencias globales por que no > estará ordenado y habrá saltos. > > Si nos cuentas cual es el problema, de preferencia en la lista para > que otros se beneficien, podrías encontrar una solución apropiada. > > > > > > > > > > > > > > > -- > > > Cordialmente, > > Ing. Hellmuth I. Vargas S. > Esp. Telemática y Negocios por Internet > Oracle Database 10g Administrator Certified Associate > > EnterpriseDB Certified PostgreSQL 9.3 Associate > > - 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