[Python-es] [off-topic] Replicación/sincronización postgresql

Chema Cortes py en ch3m4.org
Mie Feb 6 02:31:32 CET 2008


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.

>     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.

------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : no disponible
Tipo       : application/pgp-signature
Tamaño     : 189 bytes
Descripción: This is a digitally signed message part.
Url        : /archivos/python-es/attachments/20080206/27a898e7/attachment.pgp


Más información sobre la lista de distribución Python-es