Le applicazioni in tempo reale ad alto traffico sono ampiamente utilizzate nell'ambiente aziendale. Nelle applicazioni in tempo reale, le informazioni vengono messe a tua disposizione nei momenti in cui vengono prodotte e qualsiasi ritardo nel farlo può causare gravi perdite finanziarie. La sfida principale affrontata da queste applicazioni in tempo reale ad alto traffico è ricevere notifiche su eventuali modifiche al set di dati in modo che le viste corrispondenti possano essere aggiornate.
Ma queste applicazioni in tempo reale ad alto traffico non possono fare affidamento sul database tradizionale perché supportano solo le query sui dati residenti e per ottenere il set di dati aggiornato è necessario eseguire nuovamente la query dopo un intervallo specifico che non è istantaneo. Inoltre, questo polling periodico causa anche problemi di prestazioni e scalabilità perché si eseguono viaggi di database costosi per lo più anche quando non ci sono modifiche nel set di dati.
Dipendenza Sql è fornito da Microsoft in SQL Server e anche Oracle su Windows lo supporta. SqlDependency consente di specificare un'istruzione SQL e SQL Server monitora questo set di dati nel database per eventuali aggiunte, aggiornamenti o eliminazioni e avvisa l'utente quando ciò si verifica. Ma il problema con SqlDependency è che una volta attivato, non viene registrato dal database. Pertanto, tutte le modifiche future nel tuo set di dati vengono perse e non ricevi notifiche.
Inoltre, SqlDependency non fornisce i dettagli del record in cui si è verificata la modifica. Quindi, per trovare la modifica nel set di dati, è necessario recuperare nuovamente il set di dati completo invece di recuperare direttamente solo il record specifico, che viene aggiunto, aggiornato o rimosso dal set di dati. E, naturalmente, questo non è efficiente.
Oltre alle limitazioni di SqlDependency, il database non è in grado di far fronte alle richieste transazionali di queste applicazioni in tempo reale ad alto traffico in cui vengono eseguite decine di migliaia di query ogni secondo e il database diventa rapidamente un collo di bottiglia per la scalabilità. Questo perché sebbene sia possibile ridimensionare linearmente il livello dell'applicazione aggiungendo più server delle applicazioni, non è possibile fare lo stesso con il server del database.
Questo è dove a cache distribuita piace NCache arriva perché consente di memorizzare nella cache i dati e ridurre quei costosi viaggi del database che causano collo di bottiglia della scalabilità.
NCache dispone di una potente funzionalità di query continua che consente di registrare una query simile a SQL con il cluster di cache. Questa query continua rimane attiva nel cluster di cache e se sono presenti modifiche nel set di dati di questa query, allora NCache notifica la tua applicazione in tempo reale. Questo approccio di query continua ti evita di eseguire periodicamente la stessa query costosa sul database per il polling.
Ecco il codice di esempio per NCache Interrogazione 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); … } |
E, a differenza di SqlDependency, NCache La query continua rimane attiva e non viene annullata a ogni notifica di modifica. Pertanto, le tue applicazioni in tempo reale ad alto traffico continuano a ricevere notifiche su più modifiche.
NCache La query continua ti offre anche la flessibilità di essere notificato separatamente su AGGIUNGI, AGGIORNA ed ELIMINA. Inoltre, puoi specificare questi eventi in fase di esecuzione anche dopo aver creato una query continua, cosa che SqlDependency non ti consente di fare. Ciò riduce anche il traffico degli eventi dal cluster di cache all'applicazione in tempo reale.
In sintesi, NCache ti fornisce un molto potente Query continua guidata da eventi che nessun altro database ha. E, NCache è anche linearmente scalabile per le tue applicazioni in tempo reale ad alto traffico.
Quindi, scarica una versione di prova di 60 giorni completamente funzionante di NCache Enterprise e provalo tu stesso.