Definire l'indice SQL a livello di codice
NCache consente di interrogare la cache in base a query SQL come un database. Tuttavia, a differenza di un database, qualsiasi oggetto ricercabile e i relativi campi in NCache deve essere prima indicizzato. A questo proposito, NCache consente agli sviluppatori di definire facilmente gli indici SQL a livello di codice. Ti consente di indicizzare tutti i campi e le proprietà primitivi pubblici, privati e protetti. Vedere NCache tipi di dati supportati per ulteriori dettagli.
Consiglio
In alternativa, è possibile configurare gli indici SQL tramite il file NCache Centro di gestione or PowerShell.
Note:
Non è possibile indicizzare un campo del tipo di riferimento.
Prerequisiti per definire gli indici SQL a livello di codice
Prima di definire gli indici SQL assicurarsi che siano soddisfatti i seguenti prerequisiti:
- Per conoscere i prerequisiti standard richiesti per lavorare con all NCache Per le funzionalità lato client fare riferimento alla pagina specificata Prerequisiti dell'API lato client.
- Gli oggetti ricercabili e i relativi attributi devono essere indicizzati da entrambi configurazione degli indici or definire gli indici a livello di codice.
- Per i dettagli dell'API, fare riferimento a: QueryIndexedAttribute, NonQueryIndexedAttribute, QueryIndicizzabile.
NCache offre la flessibilità necessaria per creare indici attraverso approcci diversi. Puoi creare indici per campi selettivi o per l'intera classe in base alle tue esigenze. Nel frattempo, alcuni campi possono essere esclusi dall'indicizzazione quando la classe viene indicizzata. Inoltre, viene fornito il supporto dell'indicizzazione anche per i client multilingue. Nello specifico, NCache dispone dei seguenti campi personalizzati per la definizione degli indici a livello di codice:
QueryIndexed
: Utilizzato per indicizzare i campi selettivi.QueryIndexed["indexName"]
: utilizzato per indicizzare un campo rispetto a un nome di indice fornito dall'utente.QueryIndexable
: Utilizzato per indicizzare l'intera classe.NonQueryIndexed
: utilizzato per escludere i campi dall'indicizzazione quando una classe viene indicizzata.
Consigli
Si consiglia di evitare l'indicizzazione di campi non necessari poiché l'indicizzazione ha un sovraccarico di memoria e prestazioni.
Qui discutiamo diversi approcci per creare indici in NCache utilizzando questi campi.
Indicizzazione selettiva
È possibile creare un indice per una particolare proprietà o campo di una classe utilizzando il file QueryIndexed
attributo. È definito a livello di proprietà o campo primitivo per indicare che la proprietà o il campo contrassegnati possono essere indicizzati. Le proprietà o i campi annotati vengono indicizzati automaticamente.
Note:
Usa sempre QueryIndexed
quando è necessario indicizzare solo alcune proprietà o campi di una classe poiché consente di risparmiare prestazioni e costi di memoria.
Questo approccio può essere utilizzato per creare indici quando relativamente poche proprietà o campi della classe richiedono l'indicizzazione. Fornisce la flessibilità di indicizzare campi selettivi, in cui è possibile selezionare manualmente solo le proprietà o i campi desiderati.
avvertimento
Se contrassegni esplicitamente un campo di riferimento come QueryIndexed
, genera un'eccezione "L'indice non è supportato per <Ref Type Name>
". Gli indici sono supportati solo sui tipi di valore.
L'esempio seguente mostra come indicizzare i campi selettivi utilizzando QueryIndexed
senza indicizzare l'intera classe. NCache creerà automaticamente gli indici per i campi ID ed Nome solo.
public class Product
{
[QueryIndexed]
public int ID { get; set} // explicitly indexed
[QueryIndexed]
public string Name { get; set} // explicitly indexed
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
Note:
Per garantire che l'operazione sia a prova di errore, si consiglia di gestire eventuali potenziali eccezioni all'interno dell'applicazione, come spiegato in Gestione dei guasti.
Nell'esempio precedente, il nome dell'indice è uguale al nome del campo poiché questo è il comportamento predefinito durante l'utilizzo di QueryIndexed
attributo per l'indicizzazione selettiva. Tuttavia, NCache consente di definire nomi personalizzati per i campi o le proprietà da indicizzare tramite il QueryIndexed ("indexName")
annotazione. In tal caso, verrà utilizzato il nome specificato dall'utente nel costruttore, durante la creazione di un indice.
Ciò può essere utile quando si sviluppa un codice dell'applicazione in lingue diverse e i nomi dei campi possono variare. Ad esempio, un'applicazione di e-commerce ha client .NET e Java, dove il client .NET denomina un campo di Prodotto classe come Prezzo unitario, mentre un client Java denomina lo stesso campo di Prezzo per unità. Per indicizzare questo campo, è possibile specificare un nome personalizzato sia in .NET che in Java utilizzando il file QueryIndexed("price")
attributo. Il campo contrassegnato verrà indicizzato con il nome prezzo per tutti i clienti. Ora, diversi client possono eseguire la query utilizzando prezzo nella clausola WHERE o come proiezione.
avvertimento
Se un campo viene indicizzato utilizzando QueryIndexed["indexName"]
, l'esecuzione di query sui dati in base al nome del campo genererà un'eccezione "Indice non definito per il nome del campo".
L'esempio seguente mostra come indicizzare i campi selettivi di una classe utilizzando il nome dell'indice scelto.
public class Product
{
[QueryIndexed]
public int ID { get; set} // explicitly indexed with index name ID
[QueryIndexed]
public string Name { get; set} // explicitly indexed with index name
[QueryIndexed("price")]
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
Indicizzazione delle classi
Puoi indicizzare la tua classe usando l'attributo QueryIndexable
. Viene definito a livello di classe per indicare che l'intera classe può essere indicizzata. Quando contrassegni una classe come QueryIndexable
, tutte le proprietà e i campi pubblici verranno indicizzati automaticamente. Se la tua classe ha un campo privato che richiede l'indicizzazione, devi contrassegnarlo in modo esplicito utilizzando il QueryIndexed
attributo per la creazione del suo indice.
Questo approccio deve essere utilizzato solo quando si desidera eseguire una query sull'indice di tutte o della maggior parte delle proprietà o dei campi di una classe. In caso contrario, non è incoraggiato, poiché esiste la possibilità che indicizzi proprietà non necessarie. Alla fine, ciò ridurrà le prestazioni dell'applicazione a causa della memoria sottostante e del sovraccarico delle prestazioni dell'indicizzazione.
avvertimento
- Non è consigliabile utilizzare
QueryIndexable
, a meno che tutte o la maggior parte delle proprietà o dei campi non richiedano l'indicizzazione, poiché l'indicizzazione ha costi di memoria e prestazioni. - Contrassegnare una classe come
QueryIndexable
non indicizza i campi privati. In questo caso, dovrai contrassegnare individualmente ogni campo privato comeQueryIndexable
per indicizzarlo.
L'esempio seguente mostra l'indicizzazione dei campi di una classe denominata Prodotto usando il QueryIndexable
, attributo. Questo indicizzerà il file ID, Nomee Prezzo unitario campi. Il campo Categoria è esplicitamente contrassegnato come QueryIndexed
visto che è privato. Indicizzazione verrà ignorato poiché è un campo di riferimento che punta all'oggetto del classe, mentre NCache non consente l'indicizzazione dei campi di riferimento.
[QueryIndexable]
public class Product
{
public int ID { get; set} // auto index
public string Name { get; set} // auto index
public Decimal UnitPrice { get; set } // auto index
[QueryIndexed]
private string Category { get; set } // explicitly marked for indexing
public Customer Customer { get; set; } // will not be indexed
}
Esclusione dei campi dall'indicizzazione
È possibile utilizzare il NonQueryIndexed
attributo per impedire l'indicizzazione di proprietà o campi non richiesti quando la classe viene indicizzata. L'attributo NonQueryIndexed
è definito a livello di proprietà o campo primitivo per indicare che la proprietà o il campo devono essere esclusi dall'indicizzazione quando la classe stessa è contrassegnata come QueryIndexable
. Tutte le proprietà e i campi pubblici verranno indicizzati automaticamente. I campi contrassegnati con il NonQueryIndexed
l'attributo verrà escluso dall'indicizzazione. Puoi usare una combinazione di QueryIndexable
ed NonQueryIndexed
quando la maggior parte delle proprietà richiede l'indicizzazione tranne alcune.
L'esempio seguente mostra come escludere il campo Prezzo unitario dall'indicizzazione contrassegnandolo esplicitamente come NonQueryIndexed
quando la classe stessa è indicizzata. Questo ignorerà l'indicizzazione del campo annotato.
[QueryIndexable]
public class Product
{
public int ID { get; set} // auto index
public string Name { get; set} // auto index
[NonQueryIndexed]
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
Note:
NCache consente di eliminare eventuali errori associati alla creazione di indici tramite NCacheServer.SuppressIndexNotDefinedException
tag nel file NCache File di configurazione del servizio.
Risorse addizionali
NCache fornisce un'applicazione di esempio per le query SQL su GitHub.
Vedere anche
.NETTO: Alachisoft.NCache.Cliente spazio dei nomi.
Giava: com.alachisoft.ncache.cliente spazio dei nomi.