[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