Una aplicación necesita tener datos lo más actualizados posible desde una base de datos como sea posible. En tal caso, ¿hay alguna otra forma de obtener los datos, además de un temporizador que solicita (sondea) la base de datos?
Trabajo con un servidor MS SQL Server 2008 (y aplicaciones .NET + Entity Framework), pero también me gustaría conocer otros tipos de bases de datos.
database-design
database-recommendation
query
movimiento rápido del ojo
fuente
fuente
Respuestas:
Service Broker para SQL Server 2005+ puede hacer esto.
Lo siento, no estoy seguro de otros RDBMS
fuente
En Oracle puede usar el paquete incorporado DBMS_ALERT para facilitar esto.
fuente
Ciertos proveedores de bases de datos también proporcionan buses de mensajes integrados a los que su aplicación simplemente puede suscribirse:
Una alternativa sería enrutar los datos en la base de datos en primer lugar a través de un bus de mensajes como Tibco / RV y simplemente "ramificarlos", en la secuencia que va a la base de datos y uno que va a su aplicación, o usar una capa de almacenamiento en caché como Coherence entre tu aplicación y el DB.
fuente
ESCUCHAR / NOTIFICAR para PostgreSQL
http://www.postgresql.org/docs/current/static/sql-notify.html
en la base de datos ...
o en una función / disparador:
en el cliente de la base de datos:
El cliente LISTEN recibirá el ID del proceso PostgreSQL, el nombre del canal y el valor del mensaje.
Al controlador JDBC estándar para PostgreSQL no le gustan las notificaciones, sin embargo, puede usar el controlador https://github.com/impossibl/pgjdbc-ng para este propósito
fuente
Otra solución de Oracle: hemos desarrollado aplicaciones que utilizan el marco dotnet de Microsoft que aprovechan la función de Notificación de cambio de base de datos de Oracle junto con ODP.Net (el proveedor de datos de Oracle para dotnet). Al usar esto, la base de datos notifica a la aplicación dotnet cuando llegan nuevos datos, lo que nos permite evitar sondeos constantes. El enlace al que hago referencia anteriormente es un tutorial de Oracle para hacer precisamente eso. Espero que esto te ayude.
No sé sobre ningún otro RDBMS.
fuente
Para una de nuestras aplicaciones (a través de Chrome y SOLO Chrome), estamos usando MySQL con sys_exec UDF . Básicamente, por qué Chrome, debido al soporte de WebSocket.
Una vez que se produce una actualización / inserción / eliminación crítica, se invoca un programa externo a través de la funcionalidad sys_exec recientemente agregada incorporada en ciertos disparadores. En ese momento, tenemos todo lo que necesitamos para transmitir el mensaje a cada cliente conectado sin necesidad de encuestas o consultas múltiples, ya que todo sucede en tiempo real.
fuente
Utilizamos una combinación de Oracle GoldenGate y Java Persistence API (JPA) para hacer esto con la base de datos Oracle, pero también con DB2, Sybase, Microsoft SQL Server, MySQL, Teradata, etc. La característica se describe aquí: http: // docs .oracle.com / middleware / 1212 / coherence / COHIG / golden_g.htm
Lo que GoldenGate hace es convertir el registro de transacciones de la base de datos en una secuencia de eventos filtrable que se puede consumir en cualquier lugar de la red. Lo usamos para convertir transacciones relevantes en actualizaciones de caché o invalidaciones de caché, que pueden desencadenar eventos a nivel de aplicación, por ejemplo, enviar los datos a aplicaciones de escritorio o HTML5 websocket.
(Para una divulgación completa, trabajo en Oracle en uno de los productos con GoldenGate).
fuente