c# - tasa - .NET SqlDependency con muchas notificaciones vs. alta velocidad de sondeo?
tasa de sondeo mouse (1)
SqlDependency solo le notificará que se produjo un cambio, y tendrá que volver a leer toda la tabla. Funciona bien con una baja tasa de notificaciones. A una tasa alta, debe considerar que las notificaciones tienen un costo significativo. Vea The Mysterious Notification para más detalles sobre cómo funciona SqlDependency. Como pueden ver, hay un costo significativo:
- configurar la notificación (escribiendo en sys.dm_qn_subscriptions y en las tablas del sistema SSB)
- disparando la notificación (escribiendo sys.dm_qn_subscriptions)
- entrega de la notificación (escribe en tablas del sistema SSB, cola de destino)
- recibir la notificación (escribe en cola de destino, tablas del sistema SSB)
Son bastantes las escrituras, el costo se acumulará rápidamente si te notifican constantemente.
Pero la verdadera pregunta es ¿exactamente cómo quieres reaccionar en la aplicación a un ritmo constante de cambio? ¿Qué quieres saber, que algo cambió? bueno, ya sabes, siempre lo hace, cada vez que la aplicación necesita los datos, lee mejor el último estado, porque ciertamente cambió. El sondeo tampoco tiene sentido. Parece que lo que realmente quieres es un seguimiento de cambios o, más probablemente, una cola de cambios basada en la costumbre alimentada por los creadores de cambios.
Tengo una mesa pequeña (aproximadamente 200 filas) que cambia todo el tiempo (un par de veces por segundo).
Estaba buscando una solución en la que pudiera recibir notificaciones de la base de datos cada vez que cambiara, en lugar de sondearla (digamos de 5 a 10 veces por segundo).
Además, me gustaría recibir solo las filas modificadas cada vez y no obtener toda la tabla. Esto me ha resultado bastante difícil de implementar al utilizar la clase SqlDependency.
Un par de cosas para tomar en consideración:
- No tengo control sobre los cambios en la tabla ni tengo la capacidad de recibir los datos que no sean el uso de la base de datos.
- Tengo la intención de construir un servicio que transmitirá los cambios a mis servidores frontales
¿Hay alguna manera de hacer esto usando SqlDependency?
¿Cuál es la mejor práctica dada este caso?
Por cierto: estoy usando SQL Server 2012
Gracias por adelantado