Re: Fwd: consulta sobre sequencias globales de BDR

From: Gerardo Herzig <gherzig(at)fmed(dot)uba(dot)ar>
To: Hellmuth Vargas <hivs77(at)gmail(dot)com>
Cc: Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Fwd: consulta sobre sequencias globales de BDR
Date: 2015-01-30 23:56:33
Message-ID: 556448178.853832.1422662193618.JavaMail.root@fmed.uba.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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" <hivs77(at)gmail(dot)com>
> Para: "Lista Postgres ES" <pgsql-es-ayuda(at)postgresql(dot)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" < hivs77(at)gmail(dot)com >
> Fecha: ene 29, 2015 2:49 AM
> Asunto: consulta sobre sequencias globales de BDR
> Para: "Lista Postgres ES" < pgsql-es-ayuda(at)postgresql(dot)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(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Hellmuth Vargas 2015-01-31 02:14:08 Re: Fwd: consulta sobre sequencias globales de BDR
Previous Message Hellmuth Vargas 2015-01-30 09:27:22 Fwd: consulta sobre sequencias globales de BDR