tiempo realtime real google developer datos database synchronization

database - realtime - Sincronización en tiempo real de los datos de la base de datos en todos los clientes



firebase web (2)

¿Cuál es la mejor estrategia para mantener sincronizados todos los clientes de un servidor de base de datos?

El escenario involucra un servidor de base de datos y un número dinámico de clientes que se conectan a él, viendo y modificando los datos.

Necesito sincronización en tiempo real de los datos entre todos los clientes; si se agregan, eliminan o actualizan datos, quiero que todos los clientes vean los cambios en tiempo real sin poner demasiada presión en el motor de la base de datos mediante sondeos continuos para cambios en tablas con un par de millones de filas.

Ahora estoy usando un servidor de base de datos Firebird, pero estoy dispuesto a adoptar la mejor tecnología para el trabajo, por lo que quiero saber si existe algún tipo de marco ya existente para este tipo de escenario, qué motor de base de datos utiliza y ¿Qué implica?


SQL Server 2005 y una mayor carencia de caché de la fuente de datos basada en notificaciones de soporte.


Firebird tiene una función llamada EVENT que puede usar para notificar a los clientes sobre cambios en la base de datos. La idea es que cuando se cambian los datos en una tabla, un activador publica un evento. Firebird se encarga de notificar a todos los clientes que han registrado un interés en el evento por su nombre. Una vez notificado, cada cliente es responsable de actualizar sus propios datos al consultar la base de datos.

El cliente no puede obtener información del evento sobre los valores nuevos o antiguos. Esto es por diseño, porque no hay forma de resolver esto con el aislamiento de transacción. Tampoco su cliente puede registrarse para eventos usando comodines. Por lo tanto, debe diseñar su notificación de servidor a cliente de manera bastante amplia y dejar que el cliente se actualice para ver qué cambió exactamente.

Ver http://www.firebirdsql.org/doc/whitepapers/events_paper.pdf

No mencionas qué plataforma o idioma de cliente estás usando, así que no puedo aconsejarte sobre la API específica que usarías. Le sugiero que busque, por ejemplo, "firebird event java" o "firebird event php" o similar, según el idioma que esté utilizando.

Como dice en un comentario que está usando WPF, aquí hay un enlace a una muestra de código de algún código de la aplicación .NET que se registra para la notificación de un evento:

http://www.firebirdsql.org/index.php?op=devel&sub=netprovider&id=examples#3

Re su comentario: Sí, el mecanismo de evento Firebird está limitado en su capacidad para transportar información. Esto es necesario porque cualquier información que pueda contener podría cancelarse o retrotraerse. Por ejemplo, si un activador publica un evento pero luego la operación que generó el activador viola una restricción, cancela la operación pero no el evento. Entonces los eventos solo pueden ser una especie de "sugerencia" de que algo de interés puede haber sucedido. Los otros clientes necesitan actualizar sus datos en ese momento, pero no se les dice qué buscar. Esto es al menos mejor que las encuestas.

Así que básicamente estás describiendo un mecanismo de publicación / suscripción: una cola de mensajes . No estoy seguro de que use un RDBMS para implementar una cola de mensajes. Se puede hacer, pero básicamente estás reinventando la rueda.

Aquí hay algunos productos de cola de mensajes que son bien considerados:

Esto significa que cuando un cliente modifica los datos de una manera que otros pueden necesitar saber, ese cliente también debe publicar un mensaje en la cola de mensajes. Cuando los clientes de consumo ven el mensaje que les interesa, saben actualizar su copia de algunos datos.