[Python-es] [off-topic] Replicación/sincronización postgresql
Alberto Curro
acurro en wanadoo.es
Mie Feb 6 14:18:34 CET 2008
Chema Cortes escribió:
> El Tuesday 05 February 2008 22:46:53 Alberto Curro escribió:
>
>
>> No estoy hablando de bases de datos temporales o sólo de proyectos o en
>> desarrollo. Si voy a trabajar sobre ello y dedicarle tiempo, quiero
>> hacerlo para bases de datos en producción y con datos reales... sólo por
>> poner un ejemplo, quiero aplicarlo a soluciones con AbanQ que ya tengo
>> funcionando, para los portátiles de los comerciales (por ejemplo).
>>
>> Basándome en esto, pensé en una solución. No tengo mucha experiencia en
>> Python, pero me parece que si algo le iría como un guante, sería esto.
>> La idea en rasgos generales es la siguiete :
>>
>> [...]
>>
>
> Desde que conozco postgres, he oído varios intentos sin éxito de hacer lo
> mismo que pretendes para sincronización de dos bases de datos arbitrarias. El
> problema es que resulta tremendamente dependiente del diseño. Borrar un
> objeto (tabla, registro, base) puede desencadenar una cascada de acciones,
> disparando triggers y provocando la activación de diversas reglas (rules),
> hasta tal extremo que se puede afirmar que borrar un registro para luego
> volver a insertarlo nunca asegura que se vaya a quedar la base de datos tal
> como estaba en un principio.
>
> Por éso la alternativa pasa por repetir las mismas operaciones secuencialmente
> en todos los servidores, de modo síncrono o asíncrono. Tu caso sería
> asíncrono, con lo que bucardo te podría funcionar. Bucardo instala un daemon
> que comunica al resto de masters que se ha producido un cambio para que se
> actualicen cuando puedan. Pero tu caso podría ser más simple: bastaría con
> crear "rules" que vayan guardando las actualizaciones en tablas deltas, de
> donde un sencillo script realizaría la sincronización de los masters bajo
> demanda. El único problema es que estas tablas delta crecen enormemente, por
> lo que tendrás que implementar algún mecanismo de contención.
>
> Tendrás que diseñar tu base de datos pensando en la sincronización, y no al
> revés.
>
>
Eso es lo mismo que pensé mientras miraba la documentación de Bucardo
(por cierto, gracias mil por el enlace, mira que busqué y rebusqué con
google con "casi" las mismas palabras y no lo encontré en ninguna
búsqueda ¿?).
Bucardo parece ser lo que busco pero, como tú bien dices, habría que
hacer unas "pequeñas" modificaciones para tener en cuenta justamente que
quiero que la actualización más tarde sea en batch, no cómo lo hace
bucardo ahora mismo.
Ya estoy con ello ;)
Otra vez, gracias mil.
>> 3) Ambas bases de datos han de estar bloqueadas al resto de usuarios
>> durante el proceso (no creo que sea difícil, supongo que PostgreSQL
>> dispone de funcionalidad para ello).
>>
>
> Comando LOCK, para bloquear tablas, y asignando roles de grupo para todo lo
> demás.
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es