title: SQL Query: Behavior and Usage Overview description: Learn about all the SQL Query operators and clauses that NCache supports and the role they play in cache management.
canonico: https://www.alachisoft.com/resources/docs/ncache/prog-guide/sql-ncache.html
Query SQL: panoramica sul comportamento e sull'utilizzo
NCache è una cache di valore-chiave in cui ogni nuovo oggetto viene archiviato in base a una chiave univoca. Simile a un database relazionale in cui la chiave primaria trova i dati, NCache consente di recuperare tali dati specificando la chiave corrispondente. Tuttavia, molti scenari pratici richiedono la capacità di eseguire ricerche in modo flessibile per acquisire dati basati su attributi diversi, non solo sulla chiave primaria. Poiché la maggior parte delle applicazioni transazionali elevate mantiene i dati nella cache, la capacità di interrogare i dati è altamente desiderabile.
SQL Query: Importance of Querying in Cache
Supponiamo che esista un sito Web di e-commerce, in cui i prodotti vengono interrogati in base a una serie di criteri come categoria, prezzo, peso, ecc. Per migliorare le prestazioni dell'applicazione, l'utilizzo di un sistema di cache distribuito sembra essere una soluzione adeguata. Tuttavia, la perdita della funzionalità di query o la riscrittura dell'applicazione non è accettabile.
In tale scenario, NCache è una cache distribuita ideale che può ridimensionare le prestazioni dell'applicazione senza compromettere la capacità di query. Nello specifico, NCache Consente di interrogare i dati memorizzati nella cache basato su diversi attributi utilizzando la sintassi di query simile a SQL. Impiegando NCache per lo scenario menzionato in precedenza, puoi eseguire una query per tutti i prodotti utilizzando la categoria, il prezzo o il peso come criteri.
Note:
NCache consente la ricerca e l'eliminazione dei dati in una cache utilizzando la sintassi di query simile a SQL.
NCache offre la flessibilità di recuperare proiezioni, l'intero oggetto, solo le chiavi della cache o la stessa coppia chiave-valore in base alle tue esigenze. Inoltre, NCache supporta anche il operatori di query di base, operatori logicie funzioni aggregate fornito da SQL.
Come Funziona?
In NCache, the data is distributed across different cluster nodes due to partitioning. Searching for a customer using its ID might be easy enough when there are a thousand customers. However, finding one in a million would not have the same complexity, when the records are distributed across different nodes, and the query criteria can be any customer attribute. In this context, query in the cache requires an efficient data-searching mechanism.
In particolare, NCache impiega indicizzazione ed interrogazioni distribuite per supportare la capacità di ricerca simile a SQL in tempo reale nella cache. L'indicizzazione rende un attributo ricercabile nella cache. Una volta che un elemento viene aggiunto a un indice, viene restituito come risultato della query sul nodo a cui è connesso il client. Nel frattempo, una query viene eseguita in modo distribuito quando i dati vengono distribuiti nella topologia partizionata.
Consigli
Un attributo deve essere indicizzato per essere ricercabile nella cache.
Indicizzazione
I database tradizionali utilizzano l'indicizzazione per migliorare le prestazioni delle query. Tuttavia, NCache usa indicizzazione come obbligatorio per abilitare la ricerca tramite query simili a SQL. Per interrogare i dati della cache, tutti gli attributi ricercabili devono essere prima indicizzati. È importante notare che i campi specificati nelle proiezioni e nei criteri devono essere indicizzati. Una volta definito un indice per un attributo, tutti i dati rilevanti aggiunti alla cache vengono indicizzati automaticamente e diventano ricercabili. Quindi, definire gli indici una volta è sufficiente.
Note:
Le operazioni di lettura sono molto più veloci grazie all'indicizzazione, ma ogni operazione di scrittura comporta un sovraccarico.
NCache utilizza l'indicizzazione poiché è un approccio orientato alle prestazioni. L'indicizzazione elimina la necessità di interrogare ogni voce nella cache durante la ricerca di un set di risultati di query. Ciò accelera il meccanismo di ricerca e consente di risparmiare tempo e potenza di calcolo.
avvertimento
Non indicizzare i campi non necessari, poiché comporterebbe un sovraccarico di memoria e prestazioni.
Query distribuite
La query eseguita in NCache varia in base alla topologia della cache e alla connettività del client sottostante. Nel caso della topologia speculare o replicata, la query viene eseguita solo sul nodo con cui si connette il client. Tuttavia, ciò non si verifica quando i dati vengono partizionati tra i nodi del cluster.
Le domande su a cluster partizionato eseguire in modo distribuito principalmente a causa del partizionamento dei dati. La query viene eseguita individualmente su ciascun nodo poiché il client si connette a tutti i nodi del cluster. Il set di risultati costituito dai dati richiesti viene restituito da ciascun nodo e unito prima di restituire il risultato finale al client. In questo caso, le prestazioni dipendono anche dal numero di nodi del cluster e dalla dimensione del set di risultati restituito da ciascun nodo.
Note:
La query distribuita in NCache è altamente scalabile.
La query distribuita offre una maggiore scalabilità in NCache a causa dei dati partizionati e della loro esecuzione parallela. Quando nuovi nodi si uniscono al cluster, i dati partizionati per ciascun membro si riducono. Pertanto, il tempo di esecuzione della query impiegato da ciascun nodo del server viene ridotto. Inoltre, anche il traffico di rete si riduce, a causa dell'esecuzione simultanea su ciascun nodo.
Query SQL in NCache
NCache consente di cercare ed eliminare i dati della cache utilizzando rispettivamente query SELECT e DELETE simili a SQL. Le operazioni INSERT e UPDATE non sono attualmente supportate. Esegui Lettore viene utilizzato per eseguire la query SELECT nella cache e restituisce il set di risultati a un'istanza di ICacheReader. Esegui Scalare esegue la query e restituisce la prima colonna della prima riga nel set di risultati restituito dalla query, eventuali colonne o righe aggiuntive vengono ignorate.
EseguiNonQuery viene utilizzato per eliminare elementi dalla cache. È possibile eseguire query su tutti i tipi di dati primitivi e sui tipi nullable a condizione che siano stati definiti gli indici di query.
Consigli
Assicurati di chiudere l'istanza di ICacheReader
dopo l'esecuzione, in quanto è necessario pulire le risorse.
Il linguaggio di query consente di specificare criteri di chiave non primaria a seconda dei dati richiesti. È possibile eseguire query per eseguire query sui dati nella cache utilizzando proiezioni e criteri diversi. Tuttavia, gli attributi specificati nelle proiezioni e nei criteri devono essere indicizzati. Inoltre, in base alle tue esigenze, hai la flessibilità di recuperare solo le chiavi della cache o interi elementi che soddisfano i criteri di query specificati.
Tipi di indicizzazione
Se si desidera eseguire una query per un attributo nella cache, è necessario prima indicizzarlo. NCache fornisce diversi modi flessibili per indicizzazione. Considerando la necessità di indici (statici) predefiniti, NCache consente di definire manualmente gli indici per gli attributi ricercabili in anticipo. Un modo per definire gli indici statici è attraverso configurazione. In alternativa, puoi anche definire gli indici a livello di codice.
D'altro canto, indici dinamici come gruppi, tag e tag con nome vengono creati automaticamente in fase di esecuzione per un attributo. Gli indici di runtime consentono di interrogare i dati nella cache in base a gruppi logici, tag e tag con nome.
Query utilizzando proiezioni SQL
NCache ti consente di recuperare tutti gli attributi indicizzati di una classe o proiezioni specifiche dall'archivio cache in base alla tua query. NCache supporta diversi proiezioni per facilitare una ricerca efficiente. Le proiezioni svolgono un ruolo importante nel miglioramento delle prestazioni della tua applicazione quando si tratta di query. Ad esempio, desideri recuperare solo la colonna delle unità disponibili per i prodotti in una categoria specifica. In tal caso, puoi utilizzare la seguente query SELECT.
SELECT UnitsInStock FROM FQN.Product WHERE Category = "Sample_Category"
Note:
Per il miglioramento delle prestazioni, è meglio interrogare solo le colonne essenziali, poiché la restituzione dell'oggetto completo è costosa.
Vale la pena notare che recuperando solo le colonne desiderate, il sovraccarico aggiuntivo derivante dal recupero di tutti gli attributi indicizzati del Product
la classe è evitata. In questo modo, NCache consente agli utenti di ottenere prestazioni migliorate attraverso una migliore sintassi delle query.
Query per chiavi e oggetti
In base alle tue esigenze, puoi recuperare solo le chiavi della cache o i dati associati alla tua query. Se devi enumerare solo le chiavi, NCache consente di recuperare solo le chiavi. Si tratta di un approccio efficiente poiché la dimensione dei dati da recuperare dalla cache si riduce in modo significativo. Quindi, puoi usarlo per migliorare le prestazioni.
ExecuteReader
ha un'opzione getData
, che è impostato su false solo per il recupero della chiave. Per impostazione predefinita, il suo valore è true. Se sono necessari dati per un'ulteriore elaborazione, il valore predefinito può essere utilizzato per eseguire query sugli oggetti.
Operatori di query supportati
È possibile utilizzare un ricco set di operatori fornito da NCache in base ai criteri di query richiesti per recuperare i set di risultati desiderati dalla cache.
Sono supportate le seguenti categorie di operatori NCache interrogazioni:
Categoria | Operatore |
---|---|
Operatori di query di base | = , == , != , <> , < , > , <=, >=, IN, MI PIACE , NON MI PIACE |
Operatori logici | E, O , NON |
Funzioni aggregate | SOMMA, CONTEGGIO, MEDIA, MIN, MAX |
Miscellanea | GROUP BY, ORDER BY, DateTime.Now, DateTime ("qualsiasi stringa compatibile con data e ora") |
Per ulteriori dettagli si rimanda al Operatori di query .
Cache cliente
NCache assume il Cache cliente (cache L1) potrebbe contenere dati parziali. Considerando che i dati completi non sono garantiti nella cache L1, le query avvengono sempre nella cache del server (L2) in NCache. Se la cache L1 è abilitata sul lato client che esegue la query, il comportamento di esecuzione della query non sarà influenzato. La query verrà eseguita direttamente sulla cache del server. Tuttavia, quando i dati vengono modificati nella cache in cluster a causa di una query DELETE, L1 si sincronizza con la cache L2.
Sebbene la cache del client non influisca sull'esecuzione della query in NCache, può svolgere un ruolo essenziale nel miglioramento delle prestazioni. Ad esempio, si desidera eseguire ulteriori operazioni sul set di risultati della query, ma il recupero dei dati dalla cache potrebbe influire negativamente sulle prestazioni dell'applicazione. Se la cache del client è configurata con una cache L2, è possibile recuperare i dati desiderati con un singolo GetBulk
chiamata. Ciò consente di risparmiare tempo ed evitare il degrado delle prestazioni poiché le operazioni eseguite sulla cache del client sono molto più veloci rispetto alla cache L2.