Un mio amico ha detto che la direzione del suo superstore sta valutando la possibilità di acquistare un sistema di cache distribuito per migliorare le prestazioni della propria applicazione di e-commerce. Ma non era sicuro se questa cache distribuita avrebbe fornito loro la possibilità di farlo cercare i dati con SQL. Il motivo è che la maggior parte delle funzionalità del loro negozio online dipende dalla ricerca dei dati e non possono permettersi di riscrivere la loro applicazione. E, se tutte le loro query SQL finiscono per andare ancora al database, vanifica lo scopo di utilizzare una cache distribuita.
Se stai lottando con una situazione simile e hai bisogno di una soluzione rapida e affidabile per tutti i tuoi problemi di prestazioni, allora NCache è esattamente ciò di cui hai bisogno. Continua a leggere per saperne di più.
NCache Dettagli Scaricare NCache Confronto edizione
Cache come archivio dati
Ora, se stiamo archiviando i dati in una cache per renderli disponibili per un utilizzo più rapido, il problema spiegato dal mio amico rimane ancora; il cliente desidera interrogare l'inventario per cercare i prodotti desiderati. Bene, ho buone notizie per te (e per lui); NCache è completamente dotato di SQL che ti consente di farlo interroga i dati nella tua cache allo stesso modo in cui faresti nel tuo database.
Figura 1: NCache gestione del carico di query SQL
Aspetta... aspetta! Questo non risolve improvvisamente tutti i nostri problemi? Come mostrato nella Figura 1 L'intero catalogo prodotti è archiviato nella cache, possiamo implementare query SQL su di esso e restituire il risultato direttamente all'applicazione: ciò riduce significativamente i viaggi totali al datatable e poiché NCache è scalabile e affidabile, può gestire centinaia di migliaia di clienti contemporaneamente!
Query SQL in NCache – Esempio veloce
Supponiamo che un cliente abbia l'ID prodotto di un prodotto di cui è un consumatore frequente, nota la query di seguito, questa verrà eseguita nella cache (non nel database) e invierà il risultato all'applicazione.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache. // Provide Fully Qualified Name (FQN) of your custom class string query = "SELECT ProductName FROM FQN.Product WHERE ProductID > ?"; /// Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductName"); // Perform operations } } |
Il fatto è che queste query SQL nella cache sono molto utili, tuttavia dopotutto funzionano all'interno di una cache; Così…
Che tipo di dati viene cercato nella cache?
NCache ha due vaste categorie in cui i dati vengono archiviati. Questi sono dati transazionali e dati di riferimento.
Dati transazionali
I dati transazionali sono dati trattati come una singola unità allo scopo di soddisfare una richiesta. Questi vengono raccolti dal database come risultati di query e archiviati in una cache. Ad esempio, data la tabella del database, il cliente richiede tutti i prodotti a un prezzo inferiore a $ 5, l'output risultante memorizzato nella cache sono dati transazionali.
Figura 2: tabella Prodotti nel database
1 |
SELECT * FROM Products WHERE UnitPrice <= 5.00 |
Figura 3: risultato della query archiviato nella cache
I dati transazionali vengono generalmente archiviati temporaneamente per l'elaborazione. Viene aggiornato frequentemente e i dati vecchi e non necessari vengono eliminati. SQL non è necessario per un singolo oggetto e le ricerche chiave vengono invece utilizzate per i dati dell'oggetto. I dati transazionali sono già dati dei risultati della query; pertanto, non è possibile eseguire query SQL su di esso.
Dati di riferimento
NCache consente di archiviare grandi quantità di dati nella cache per periodi di tempo più lunghi. Questo tipo di dati è noto come dati di riferimento. I dati di riferimento sono archiviati in forma strutturata e relazionale, sono regolarmente aggiornati e sincronizzati con il database. Per questi motivi, è possibile implementare query SQL su questi dati nella cache distribuita.
Con l'implementazione di NCache, la maggior parte delle query effettuate dal cliente viene eseguita nella cache e i risultati vengono restituiti immediatamente. Ciò riduce enormemente il numero di viaggi effettuati nella cache, eliminando così i viaggi eccessivi al database che eliminano tutti i colli di bottiglia delle prestazioni.
NCache Dettagli Sintassi SQL in NCache NCache Documenti SQL
Funzionalità SQL in NCache
NCache fornisce una vasta gamma di funzioni SQL e operatori che consentono di cercare ed eliminare i dati nella cache. Si noti che l'estensione SQL fornita da NCache non supporta i comandi Inserisci e Aggiorna. Questi comandi sono implementati direttamente nel database.
Diamo un'occhiata ad alcune delle esclusive funzionalità SQL in memoria fornite da NCache.
Utilizzo di caratteri jolly SQL in NCache
NCache fornisce una ricerca flessibile con due distinti caratteri jolly nella funzione SQL COME. Questi sono '?' e '*'
“?” viene utilizzato dove c'è un carattere davanti che deve essere cercato. Ad esempio, "condividere?". Questo cercherà nella cache e potrebbe fornire risultati condivisi, nitidi o simili.
"*" viene utilizzato dove potrebbe esserci da zero a qualsiasi numero di caratteri avanti che vengono cercati. Ad esempio, "cha*" potrebbe fornire un carattere, un personaggio, una sedia o qualsiasi altro risultato simile.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM FQN.Product WHERE ProductName LIKE ? AND Category LIKE ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductName", "Cha?"); queryCommand.Parameters.Add("Category", "Edib*"); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } |
Utilizzo delle funzioni di aggregazione SQL in NCache
Funzioni aggregate vengono utilizzati in SQL per eseguire operazioni aritmetiche su più valori e restituire un valore singolare. NCache utilizza queste funzioni aggregate per eseguire operazioni sugli elementi di dati memorizzati nella cache.
Alcune delle funzioni aggregate supportate da NCache siamo:
SOMMA, CONTEGGIO, MEDIA, MIN, MAX
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT COUNT(*) FROM FQN.Products WHERE UnitPrice > 5"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); } } |
Utilizzo di SQL GROUP BY in NCache
NCache ti consente di raggruppare i dati in base ai criteri forniti utilizzando il RAGGRUPPA PER funzione. Ma c'è un problema, puoi usare il raggruppamento solo nelle query che contengono una delle funzioni aggregate sopra. Per esempio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT Category, COUNT(*) FROM FQN.Products WHERE UnitPrice > 5 Group By Category"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); string category = reader.GetValue(0); } } |
Motivi NCache è una buona scelta per le app .NET
Torniamo al problema del nostro superstore. Con l'attuazione di NCache per archiviare il catalogo prodotti e implementare query SQL su di esso, ora c'è una significativa riduzione del numero di viaggi costosi che l'applicazione deve effettuare al database per eseguire query e recuperare dati.
Ecco alcuni degli altri vantaggi di NCache che vengono con questo:
- Nessun codice aggiuntivo: Poiché la maggior parte delle query vengono eseguite nella cache, non è necessario scrivere codice aggiuntivo per accedere al database ogni volta.
- 100% nativo .NET e .NET core: NCache è un .NET nativo al 100%. .NET core cache distribuita che ti consente di archiviare, gestire e interrogare i tuoi dati in una forma affidabile, a differenza di qualsiasi altra cache distribuita e datastore.
- Minori costi della larghezza di banda: Le query vengono eseguite sui dati memorizzati nella cache e restituite all'applicazione risparmiando molto tempo e costi di larghezza di banda.
- Estremamente veloce e affidabile: NCache è una cache distribuita estremamente veloce e scalabile appositamente progettata per il tuo .NET e .NET core applicazioni. Dai un'occhiata al NCache benchmark di due milioni di transazioni al secondo.
Quindi, come puoi vedere, è una situazione totalmente vantaggiosa per tutti!
Oltre al capo NCache Documenti per saperne di più su come utilizzare SQL nel datastore della cache distribuita.