Tengo una tabla con una carga pesada (muchas inserciones/actualizaciones/eliminaciones) en una base de datos SQL2005. Me gustaría hacer un procesamiento posterior para todos estos cambios lo más cerca posible al tiempo real (de forma asíncrona para no bloquear la tabla de ninguna manera). He buscado una serie de posibles soluciones, pero parece que no puedo encontrar esa solución que se sienta bien.Cómo notificar a un servicio de Windows (C#) de un cambio de tabla DB (sql 2005)?
El tipo de procesamiento posterior también es bastante pesado, tanto que el servicio de escucha de Windows va a pasar el procesamiento a varias máquinas. Sin embargo, esta parte de la aplicación ya está en funcionamiento, completamente asíncrona, y no es algo con lo que necesito ayuda. Solo quería mencionar esto simplemente porque afecta la decisión de diseño en el sentido de que no podríamos simplemente cargar un objeto CLR en el DB para completar el procesamiento.
Por lo tanto, el problema simple sigue siendo: los cambios de datos en una tabla, quiero hacer algo de procesamiento en código C# en un servidor remoto.
En la actualidad, hemos encontrado el uso de un disparador sql, que ejecuta "xp_cmdshell" para crear un exe que genera un evento que el servicio de Windows está escuchando. Esto solo se siente mal.
Sin embargo, otras soluciones que he visto en línea también se sienten complicadas. Por ejemplo, configurar SQLCacheDependancy también implica tener que configurar Service Broker. Otra posible solución es usar un activador CLR, que puede llamar a un servicio web, pero esto tiene tantas advertencias en línea sobre que es una mala forma de hacerlo, especialmente cuando el rendimiento es crítico.
Idealmente no nos detendríamos en los cambios de la tabla, sino que preferiríamos interceptar la llamada dentro de nuestra aplicación y notificar al servicio desde allí, lamentablemente tenemos algunas aplicaciones heredadas que también realizan cambios en los datos, y la supervisión de la tabla es único lugar centralizado en este momento.
Cualquier ayuda sería muy apreciada.
Resumen:
- necesidad de responder a los cambios de datos de tabla en tiempo real
- rendimiento es crítico se espera
- alto volumen de tráfico
- de sondeo y las tareas programadas no son una opción (o tiempo real)
- Implementación de un agente de servicio demasiado grande (¿pero podría ser la única solución?)
- Código CLR aún no descartado , pero hay que perfomant si sugirió
- Listener/monitor puede ser máquina remota (probabilidades de ser misma red phyisical)
En caso ubicación remota o de votación no hará gran diferencia, porque el tiempo de retardo de red en sí es superior a unos pocos milisegundos de votación. Si observas cualquier arquitectura, los eventos también se basan en encuestas en algún punto. La votación no es mala si está cuidadosamente diseñada. –