2009-09-24 13 views
14

que estoy enfrentando el siguiente desafío:bases de datos Mantener sincronizados distribuida en una red inestable

que tienen un montón de bases de datos en diferentes ubicaciones geográficas en las que la red puede fallar mucho (estoy usando la red celular). Necesito mantener todas las bases de datos sincronizadas, pero no es necesario que estén en tiempo real. Estoy usando Java, pero tengo la libertad de elegir cualquier base de datos gratuita.

Cualquier sugerencia sobre cómo puedo lograr esto.

Gracias.

+0

¿Está buscando una herramienta? ¿Desarrollando una solución personalizada? –

Respuesta

8

No conozco ninguna base de datos que le brinde esta funcionalidad de fábrica; aquí hay mucha complejidad debido a la necesidad de consistencia final y resolución de conflictos (por ejemplo, qué sucede si la red se divide en 2 mitades, y actualiza algo al valor 123 mientras lo actualizo en la otra mitad a 321, y luego las redes se vuelven a conectar?)

Puede que tenga que hacer su propio.

Para algunas ideas sobre cómo hacer esto, echa un vistazo al diseño del sistema de Yahoo PNUTS: http://research.yahoo.com/node/2304 y el Dynamo de Amazon: http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

+0

+1. Buenos enlaces! – David

+0

El documento de Yahoo es muy interesante. La idea de desarrollar mi propia solución ya estaba en mi mente. Me encantaría tener algo así como GIT para las bases de datos – jassuncao

+2

Lo que pasa con Git es que te hace realizar una fusión manual cuando hay actualizaciones conflictivas. Por lo general, no es una opción viable para las bases de datos. Por lo tanto, necesita un modelo de coherencia que genere la menor cantidad de sorpresas posible. – SquareCog

0

No conozco sus requisitos ni sus aplicaciones, pero esta no es una pregunta de respuesta rápida. Estoy muy interesado en ver lo que otros tienen para decir. Sin embargo, tengo una sugerencia que puede o no funcionar para usted, dependiendo de sus requisitos y situación. particularmente, esto no ayudará si sus usuarios necesitan usar la aplicación incluso cuando la red no está disponible (acceso fuera de línea).

Mantener una cantidad de bases de datos pequeñas sincronizadas es una tarea bastante compleja de realizar correctamente. ¿Hay alguna posibilidad de tener una sola base de datos centralizada y tener las aplicaciones cliente conectadas directamente a ella o (mi solución preferida) escribir algunos servicios web para manejar el acceso/actualización de datos en lugar de tener una gran cantidad de bases de datos de clientes?

Me doy cuenta de que esto limita el acceso sin conexión, pero hay varias estrategias de almacenamiento en caché que puede utilizar. (Lo cual, por supuesto, lo lleva de vuelta a su pregunta original.)

17

Es un problema con un corpus bastante establecida de la investigación (de los cuales la gente es aparentemente sin darse cuenta) . Sugiero a no reinventar una rueda defectuosa si no es absolutamente necesaria (como, por ejemplo, requisitos tan inusuales para permitir una solución trivial).

Algunas palabras clave: replication, mobile DBMSs, distributed disconnected DBMSs.

también estos trabajos de investigación son relevantes (como un ejemplo de este campo de investigación):

  1. Distributed disconnected databases,

... y así sucesivamente.

+0

Gran colección de información. Gracias. – jassuncao

+0

De nada. – MaD70

3

Consulte SymmetricDS. SymmetricDS es un software de replicación/sincronización de datos habilitado para la web, independiente de la base de datos. Utiliza tecnologías web y de bases de datos para replicar tablas entre bases de datos relacionales casi en tiempo real. El software fue diseñado para escalar para una gran cantidad de bases de datos, trabajar en conexiones de bajo ancho de banda y soportar períodos de interrupción de la red.

+0

Sí. Ya lo miré y lo di vuelta. Se ve bonito dios. Proabably es lo que se va a usar – jassuncao

Cuestiones relacionadas