Las aplicaciones de tiempo real de alto tráfico son ampliamente utilizadas en el entorno empresarial. En las aplicaciones en tiempo real, la información está disponible para usted en el momento en que se produce y cualquier retraso en hacerlo puede causar una pérdida financiera grave. El principal desafío que enfrentan estas aplicaciones en tiempo real de alto tráfico es recibir notificaciones sobre cualquier cambio en el conjunto de datos para que las vistas correspondientes puedan actualizarse.
Sin embargo, estas aplicaciones en tiempo real de alto tráfico no pueden confiar en la base de datos tradicional porque solo admiten consultas sobre los datos residentes y, para obtener el conjunto de datos actualizado, debe volver a ejecutar la consulta después de un intervalo específico que no es instantáneo. Y este sondeo periódico también provoca problemas de rendimiento y escalabilidad porque se realizan viajes costosos a la base de datos, principalmente incluso cuando no hay cambios en el conjunto de datos.
Dependencia Sql es proporcionado por Microsoft en SQL Server, y Oracle en Windows también lo admite. SqlDependency le permite especificar una instrucción SQL, y SQL Server supervisa este conjunto de datos en la base de datos en busca de adiciones, actualizaciones o eliminaciones y le notifica cuando esto sucede. Pero el problema con SqlDependency es que una vez que se activa, se cancela el registro de la base de datos. Por lo tanto, todos los cambios futuros en su conjunto de datos se pierden y no se le notifica.
Además, SqlDependency no proporciona detalles del registro donde ocurrió el cambio. Entonces, para encontrar el cambio en el conjunto de datos, debe recuperar el conjunto de datos completo nuevamente en lugar de obtener directamente solo el registro específico, que se agrega, actualiza o elimina del conjunto de datos. Y, por supuesto, esto no es eficiente.
Además de las limitaciones de SqlDependency, su base de datos tampoco puede hacer frente a las demandas transaccionales de estas aplicaciones en tiempo real de alto tráfico donde se ejecutan decenas de miles de consultas cada segundo y la base de datos se convierte rápidamente en un cuello de botella de escalabilidad. Esto se debe a que, aunque puede escalar linealmente su nivel de aplicación agregando más servidores de aplicaciones, no puede hacer lo mismo con su servidor de base de datos.
Aquí es donde un caché distribuida como NCache viene porque le permite almacenar datos en caché y reducir esos costosos viajes a la base de datos que están causando un cuello de botella en la escalabilidad.
NCache tiene una poderosa capacidad de consulta continua que le permite registrar una consulta similar a SQL con el clúster de caché. Esta consulta continua permanece activa en el clúster de caché y si hay algún cambio en el conjunto de datos de esta consulta, entonces NCache notifica su aplicación en tiempo real. Este enfoque de consulta continua le evita ejecutar periódicamente la misma consulta costosa en la base de datos para sondear.
Aquí hay un código de muestra para NCache Consulta continua:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public void Main(string[] args) { … NCache.InitializeCache("myPartitionReplicaCache"); String query = "SELECT NCacheQuerySample.Business.Product WHERE this.ProductID > 100"; Hashtable values = new Hashtable(); values.Add("ProductID", 100); … onItemAdded = new ContinuousQueryItemAddedCallback(OnQueryItemAdded); onItemUpdated = new ContinuousQueryItemUpdatedCallback(OnQueryItemUpdated); onItemRemoved = new ContinuousQueryItemRemovedCallback(OnQueryItemRemoved); ContinuousQuery query = new ContinuousQuery(queryString, values); query.RegisterAddNotification(onItemAdded); query.RegisterUpdateNotification(onItemUpdated); query.RegisterRemoveNotification(onItemRemoved); _cache.RegisterCQ(query); … } //data set item is removed void OnQueryItemRemoved(string key){ … Console.WriteLine("Removed key: {0}", key); … } //data set item is updated void OnQueryItemUpdated(string key){ … Console.WriteLine("Updated key: {0}", key); … } //data set item is removed void OnQueryItemAdded(string key){ … Console.WriteLine("Added key: {0}", key); … } |
Y, a diferencia de SqlDependency, NCache La consulta continua permanece activa y no se da de baja en cada notificación de cambio. Por lo tanto, sus aplicaciones en tiempo real de alto tráfico continúan siendo notificadas a través de múltiples cambios.
NCache Consulta continua también le brinda la flexibilidad de recibir notificaciones por separado sobre AGREGAR, ACTUALIZAR y ELIMINAR. Y puede especificar estos eventos en tiempo de ejecución incluso después de crear una consulta continua, algo que SqlDependency no le permite hacer. Esto también reduce el tráfico de eventos del clúster de caché a su aplicación en tiempo real.
En resumen, NCache te proporciona una muy poderosa Consulta continua impulsada por eventos que ninguna otra base de datos tiene. Y, NCache también es linealmente escalable para sus aplicaciones en tiempo real de alto tráfico.
Por lo tanto, descargue una versión de prueba de 60 días totalmente funcional de NCache Enterprise y pruébalo por ti mismo.