2011-09-19 19 views
5

Estoy buscando una forma de replicar una base de datos relacional pequeña y simple (como SQLite) entre iguales. Esto debería funcionar en un entorno con conexiones de red inestables, de ahí la necesidad de que cada par tenga una copia completa de la base de datos. Esto debería permitir que un compañero continúe trabajando fuera de línea en caso de falla de la red.Replicación punto a punto de una base de datos sqlite

Para simplificar, la replicación solo debe admitir la replicación de adición de datos, es decir, solo INSERT, no DELETE o UPDATE.

¿Alguien sabe de una buena tecnología e idealmente multiplataforma o método para crear dicho sistema? Actualmente estoy mirando JXTA y JXSE, pero estoy desconcertado por su complejidad y aparente falta de vida en su comunidad después de la adquisición de Sun por parte de Oracle.

Gracias! Frans

Respuesta

0

Es posible que desee explorar JGroups para la capa de comunicación si no le gusta JXTA. Para la replicación, creo que tendrá que implementar su propio código.

+0

Gracias! Voy a echar un vistazo a Jgroups. Entiendo que necesito codificar la replicación yo mismo. Con JXTA eso es probablemente lo mismo. Parece un problema mucho menos complicado que una comunicación P2P eficiente. – user952460

0

Estoy trabajando en algo similar (aunque el código está lejos de estar listo). Describiré un poco sobre mi enfoque previsto, pero si eso es adecuado para usted depende de algunos puntos clave de diseño que debería considerar. No estoy al tanto de ningún proyecto listo que haga esto, desafortunadamente.

  • En particular, necesitaríamos saber qué idioma desea usar o qué idiomas preferiría evitar.
  • Además, tenga en cuenta cómo piensa realizar el descubrimiento de pares: ¿puede configurar la confianza entre pares de nodos manualmente o desea que se descubran automáticamente?
  • ¿Presumiblemente todos los pares pueden insertar datos?

Si usted es capaz de utilizar PHP, y son felices pares de nodos igualitarios manualmente, entonces mi enfoque puede ser de su interés. Configure un ORM como Doctrine, Propel o NotORM, y haga que cada nodo se sincronice regularmente con una fuente de tiempo de Internet. Para cada nueva fila en un db, tome los datos (ya sea en una matriz u objeto ORM), serialícelos y extráigalos a todos los nodos con los que tenga una relación de confianza. Cuando falla un impulso, anótelo e intente de nuevo a intervalos periódicos (posiblemente abandonando el trabajo después de que un nodo remoto no pueda responder a una gran cantidad de intentos).

La aplicación puede iniciar su empuje creando la fila, o puede ser invocado por cualquier planificador disponible en cada máquina. Un mensaje de inserción puede ser XML o, para simplificar, puede ser solo un mensaje POST que contenga la nueva fila y los metadatos (por ejemplo, fecha y hora de guardado, para resolver el pedido INSERT desde varios nodos).

Si sus nodos no tienen direcciones IP estáticas, se pueden registrar con un servicio de direccionamiento DNS dinámico para permitir que cada nodo permanezca en contacto con sus pares, incluso si su IP cambia. También podría considerar agregar un sistema de firma de mensajes para garantizar que los mensajes entre los nodos sean genuinos.

+0

Gracias por los consejos. En cuanto al lenguaje, cualquier idioma serviría. Nunca he codificado PHP, pero lo más importante es que el trabajo se haga. Yo quiero auto descubrimiento. El proceso de replicación no debería requerir la interacción del usuario.Además, me gustaría un comportamiento inteligente de los compañeros, como: * use todos los medios de transporte disponibles y cambie si es necesario * los compañeros con alta conectividad deberían ayudar a los pares con baja conectividad * priorización de mensajes – user952460

+0

Si no le importa usar un desestructurado base de datos, puede probar [Refuge] (http://refuge.io), que está basado en CouchDB (y creo que está escrito en _Erlang_). Conversé con los desarrolladores a través de IRC y su conocimiento y enfoque pueden ser un buen recurso para ustedes; también quieren que su sistema tenga autodescubrimiento, creo. Creo que es temprano para ellos, sin embargo, todavía no tienen un prototipo completamente funcional. – halfer

+0

Incidentalmente mi proyecto, [Meshing] (http://blog.jondh.me.uk/meshing/), también se encuentra en etapas tempranas, pero es posible que encuentre algunos de mis escritos interesantes. Sin embargo, tenga en cuenta que no pretendo implementar el descubrimiento por pares: por lo que estoy tratando de lograr, no creo que lo necesite. – halfer

Cuestiones relacionadas