¿Cuál es la mejor manera para que la aplicación del cliente reaccione inmediatamente a una actualización en la base de datos?

StackOverflow https://stackoverflow.com/questions/587027

  •  06-09-2019
  •  | 
  •  

Pregunta

¿Cuál es la mejor manera de programar una reacción inmediata a una actualización de los datos en una base de datos?

El método más simple que se me ocurre es un hilo que verifica la base de datos para un cambio particular a algunos datos y espera continuamente para verificarlo nuevamente durante un período de tiempo predefinido. Esta solución parece ser un desperdicio y subóptimo para mí, por lo que me preguntaba si hay una mejor manera.

Supongo que debe haber alguna forma, después de todo, una aplicación web como Gmail parece poder actualizar mi bandeja de entrada casi inmediatamente después de que se me envió un nuevo correo electrónico. Seguramente mi cliente no está revisando continuamente las actualizaciones todo el tiempo. Creo que la forma en que lo hacen es con Ajax, pero cómo Ajax puede comportarse como una llamada de función remota que no sé. Tendría curiosidad por saber cómo Gmail hace esto, pero lo que más me gustaría saber es cómo hacer esto en el caso general con una base de datos.

EDITAR: Tenga en cuenta que quiero reaccionar inmediatamente a la actualización en el código del cliente, no en la base de datos en sí, por lo que por lo que sé, los desencadenantes no pueden hacer esto. Básicamente, quiero que el usuario reciba una notificación o se actualice su pantalla una vez que se haya realizado el cambio en la base de datos.

¿Fue útil?

Solución

Básicamente tienes dos problemas aquí:

  1. Desea que un navegador pueda recibir eventos asíncronos del servidor de aplicaciones web sin sondear en un bucle ajustado.

  2. Desea que la aplicación web pueda recibir eventos asincrónicos de la base de datos sin sondear en un bucle ajustado.

Para el problema #1

Vea estos enlaces de Wikipedia para el tipo de técnicas que creo que está buscando:

Editar: 19 de marzo de 2009 - Acabo de encontrar Reversohttp que podría ser de interés para el problema #1.

Para el problema #2

La solución será específica para la base de datos que está utilizando y probablemente también el controlador de la base de datos que su servidor también. Por ejemplo, con Postgresql USTED USARÍA ESCUCHAR y NOTIFICAR. (Y a riesgo de ser votado, probablemente usaría desencadenantes de la base de datos para llamar al comando notificar los cambios a los datos de la tabla).

Otra posible forma de hacer esto es si la base de datos tiene una interfaz Para crear procedimientos almacenados o desencadenantes que se vinculen a una biblioteca dinámica (es decir, un archivo DLL o .so). Luego podría escribir el código de señalización del servidor en C o lo que sea.

En el mismo tema, algunas bases de datos le permiten escribir procedimientos almacenados en idiomas como Java, Ruby, Pitón y otros. Es posible que pueda usar uno de estos (en lugar de algo que se compila en un código de máquina que dll como C) para el mecanismo de señalización.

Espero que te dé suficientes ideas para comenzar.

Otros consejos

Supongo que debe haber alguna forma, después de todo, la aplicación web como Gmail parece actualizar mi bandeja de entrada casi inmediatamente después de que se me envió un nuevo correo electrónico. Seguramente mi cliente no está revisando continuamente las actualizaciones todo el tiempo. Creo que la forma en que lo hacen es con Ajax, pero cómo Ajax puede comportarse como una llamada de función remota que no sé. Tendría curiosidad por saber cómo Gmail hace esto, pero lo que más me gustaría saber es cómo hacer esto en el caso general con una base de datos.

Eche un vistazo con Wireshark en algún momento ... Parece que hay algo de tráfico de Google allí con bastante regularidad.

Dependiendo de su DB, los desencadenantes pueden ayudar. Una aplicación que escribí se basa en desencadenantes, pero uso un mecanismo de votación para "saber" que algo ha cambiado. A menos que pueda comunicar el cambio de la DB, diría que es necesario algún mecanismo de votación.

Solo mis dos centavos.

Bueno el mejor la forma es una base de datos generar. Depende de la capacidad de su DBMS, que no ha especificado, para apoyarlos.

Re su edición: la forma en que las aplicaciones como Gmail lo hacen es, de hecho, con AJAX POLLING. Instala el Alteración de datos Extensión de Firefox para verlo en acción. El truco allí es mantener su consulta de votación cegadoramente rápido en el caso de "no noticias".

Desafortunadamente, no hay forma de enviar datos a un navegador web, solo puede enviar datos como respuesta a una solicitud, esa es la forma en que funciona HTTP.

Sin embargo, AJAX es lo que desea usar: llamar a un servicio web una vez que un segundo no es excesivo, siempre que diseñe el servicio web para asegurarse de que reciba una pequeña cantidad de datos, envíe una pequeña cantidad y puede ejecutarse muy rápidamente para generar esa respuesta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top