L'avvento dei sistemi di caching distribuiti ha facilmente risolto le sfide del sovraccarico del database e del ritardo delle prestazioni. Oggi, queste cache distribuite possono gestire in modo efficiente milioni di transazioni di dati al secondo. Tuttavia, rimane un problema significativo; molte applicazioni di livello aziendale devono tracciare le modifiche all'interno di grandi quantità di dati. Queste applicazioni devono prendere decisioni aziendali critiche basate su queste modifiche, data la dimensione considerevole di questi dati (migliaia di Gigabyte), il monitoraggio di modifiche specifiche è una vera sfida.
Come tale, NCache, una cache distribuita in memoria, offre una funzionalità nota come Interrogazione continuaQuesto blog spiega come funziona CQ, come puoi configurarlo in NCachee i vantaggi che offre per la gestione e il monitoraggio efficaci delle modifiche dei dati.
Query continua per monitorare le modifiche NCache
NCacheLa funzionalità di query continua di consente di tenere traccia delle modifiche che si verificano in un set di dati selettivo all'interno del cluster di cache distribuita. Questo set di dati è definito tramite il metodo simile a SQL OQL (linguaggio di query degli oggetti) query. Le modifiche che avvengono all'interno di questo set di dati vengono propagate alle applicazioni (che hanno registrato callback per gli eventi) sotto forma di Eventi a livello di cache.
Indipendentemente dalle dimensioni del cluster di cache, sarai informato solo delle modifiche all'interno del set di dati che hai definito e registrato nella cache. Ecco come CQ realizza il disaccoppiamento delle applicazioni, ovvero filtrando i dati tramite query OQL, assicurando che le applicazioni non si sovrappongano tra loro.
Va anche notato che Continuous Query di per sé non modifica i dati dell'applicazione. Invece, fornisce un meccanismo per monitorare e condividere i dati tra le applicazioni in fase di esecuzione tramite eventi. Gli sviluppatori possono quindi registrare callback per eventi di Continuous Query e definire la loro logica aziendale per determinare come le applicazioni gestiscono questi dati.

Figura: un diagramma che illustra il funzionamento della query continua
Configurazione della query continua in NCache
Configurazione di CQ in NCache è un processo in due fasi. Una volta completato, la tua applicazione riceverà notifiche sul set di dati definito e risponderà di conseguenza. Questi passaggi sono i seguenti:
Passaggio 1: registra query e notifiche
Inizia creando una query continua che specifica i criteri per il set di dati a cui sei interessato. Gli eventi verranno attivati in base a questa query continua. Quando ti registri per le notifiche CQ, devi iscriverti ad almeno un tipo di evento (aggiungi, aggiorna o rimuovi). Dopo aver definito la query, registra i callback pertinenti con essa e quindi registra la query sul server cache utilizzando RegistratiCQ metodo.
L'esempio di codice seguente mostra come tutto ciò accade.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Query for required operation string query = "SELECT $VALUE$ FROM Alachisoft.NCache.Samples.Data.Product WHERE Category = ?"; // Create query command and add parameters var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("Category", "Beverages"); // Create Continuous Query var cQuery = new ContinuousQuery(queryCommand); // Item add notification // EventDataFilter.DataWithMetadata returns the keys with the data and meta added with data cQuery.RegisterNotification(OnChangeInQueryResultSet, EventType.ItemAdded, EventDataFilter.DataWithMetadata); // Register continuousQuery on server cache.MessagingService.RegisterCQ(cQuery); |
Passaggio 2: definizione del callback per gli eventi
Devi effettuare l' definire un callback per eventi a livello di cache: Articolo aggiunto, Articolo Aggiornato, or Articolo rimosso in base alle tue esigenze. Tramite questi eventi, devi definire la tua logica aziendale per stabilire cosa deve fare la tua applicazione se uno di questi eventi viene attivato. Nell'esempio seguente, viene registrato un callback per l'evento ItemAdded.
|
1 2 3 4 5 6 7 8 9 |
public void OnChangeInQueryResultSet(string key, CQEventArg arg) { switch (arg.EventType) { case EventType.ItemAdded: Console.WriteLine ($"Item with key '{key}' has been added to result set of continuous query"); break; } } |
Passaggio 3: annullare la registrazione delle notifiche dalla query continua
NCache ti dà la possibilità di annullare la registrazione delle notifiche dalla Query continua quando non ne hai più bisogno. Questo viene fatto usando il Notifica di annullamento della registrazione metodo. Puoi usare questo metodo per annullare la registrazione delle notifiche per le operazioni di aggiunta, aggiornamento e rimozione, tutte insieme o per un evento specifico. Se sei interessato a ricevere notifiche per specifici tipi di eventi (ad esempio, aggiunta e rimozione) ma non per altri (ad esempio, aggiornamento), puoi annullare la registrazione delle notifiche di aggiornamento mantenendo comunque registrate le notifiche di aggiunta e rimozione. È importante considerare che quando un client annulla la registrazione di una notifica da una query continua, ciò riguarda solo quel client. Altri client con le stesse notifiche rimangono inalterati, consentendo una gestione indipendente degli abbonamenti.
Nell'esempio seguente, una notifica di evento per una notifica di elemento aggiunto viene annullata da un CQ. Tuttavia, tieni presente che non puoi annullare la registrazione di tutte le notifiche CQ tramite questo metodo. Per questo, un metodo separato Annullare la registrazione CQ viene utilizzato.
|
1 |
cQuery.UnRegisterNotification(OnChangeInQueryResultSet, EventType.ItemAdded); |
Passaggio 4: annullare la registrazione della query continua dal server
NCache ti dà anche la possibilità di annullare la registrazione dell'intero CQ dal cluster di cache utilizzando Annullare la registrazione CQ metodo. Quando un client usa il metodo UnRegisterCQ, il set di risultati non viene rimosso immediatamente dal server. Se è l'ultimo client, il set di risultati verrà rimosso dalla cache. In caso contrario, il set di risultati rimane nella cache, ma quel client specifico non riceverà più notifiche per esso. In sostanza, dipende dal numero di client registrati per quel set di risultati. Nel seguente esempio di codice, una query continua viene annullata dalla cache del server.
|
1 |
cache.MessagingService.UnRegisterCQ(cQuery); |
NCache: La migliore soluzione là fuori
Quando si tratta di applicazioni aziendali grandi e complesse, l'elaborazione dei dati rappresenta una sfida enorme. NCache affronta questo problema con Streaming Processing convertendo dati grandi e complessi in flussi di dati gestibili per una facile elaborazione.
Un'applicazione popolare di Stream Processing è il Abbonato editore modello di NCache. Tuttavia, ciò comporta le seguenti limitazioni:
- I messaggi non vengono mantenuti dalle applicazioni una volta consegnati agli abbonati.
- Il filtraggio dei dati avviene sul lato client, rendendo l'architettura dell'applicazione più complessa.
La query continua risolve entrambi questi problemi nei seguenti modi:
- Mantenendo i dati all'interno della cache anche dopo l'elaborazione.
- Filtrando i dati tramite istruzioni OQL piuttosto semplici sul lato server, garantendo un'architettura applicativa semplice.
Conclusione
NCache è una cache distribuita estremamente veloce, facile da scalare che gestisce i colli di bottiglia del database in modo efficiente ed efficace. Proprio come Query continua, Elaborazione flusso e Messaggistica Pub/Sub, NCache ha molte altre funzionalità ricche e potenti che dovresti provare. Queste funzionalità ti danno risultati sia quantitativi che qualitativi. Prova NCache adesso!






