Coerenza delle query

La coerenza delle query si riferisce alla sincronizzazione delle query e degli aggiornamenti. Esistono due modalità supportate di coerenza delle query:

  • Coerenza assoluta: la coerenza assoluta garantisce l'accesso immediato agli aggiornamenti più recenti, ad esempio le aggiunte ai dati, le eliminazioni e le modifiche dello schema. La coerenza assoluta è la modalità di coerenza predefinita. A causa della sincronizzazione, questa modalità di coerenza esegue leggermente meno bene della modalità di coerenza debole in termini di concorrenza.

  • Coerenza debole: con coerenza debole, potrebbe verificarsi un ritardo prima che i risultati delle query riflettano gli aggiornamenti più recenti del database. In genere, questo ritardo varia da 1 a 2 minuti. La coerenza debole può supportare tassi di concorrenza delle query più elevati rispetto alla coerenza assoluta.

Ad esempio, se 1000 record vengono inseriti ogni minuto in una tabella nel database, le query su tale tabella in esecuzione con coerenza assoluta avranno accesso ai record inseriti più di recente, mentre le query su tale tabella in esecuzione con coerenza debole potrebbero non avere accesso ad alcuni record degli ultimi minuti.

Nota

Per impostazione predefinita, le query vengono eseguite con coerenza assoluta. È consigliabile passare alla coerenza debole solo quando necessario per supportare una concorrenza di query più elevata.

Casi d'uso per coerenza assoluta

Se si ha una forte dipendenza dagli aggiornamenti che si sono verificati nel database negli ultimi minuti, usare la coerenza assoluta.

Ad esempio, la query seguente conta il numero di record di errore nei 5 minuti e attiva un avviso maggiore di 0. Questo caso d'uso è meglio gestito con coerenza assoluta, poiché le informazioni dettagliate potrebbero essere modificate non si ha accesso ai record inseriti negli ultimi minuti, come nel caso della coerenza debole.

my_table
| where timestamp between(ago(5m)..now())
| where level == "error"
| count

Inoltre, è consigliabile usare la coerenza assoluta quando i metadati del database sono di grandi dimensioni. Ad esempio. nel database sono presenti milioni di extent di dati , l'uso di coerenza debole comporta il download e la deserializzazione di elementi di metadati estesi dall'archiviazione permanente, che può aumentare la probabilità di errori temporanei nei download e nelle operazioni correlate.

Casi d'uso per coerenza debole

Se non si ha una dipendenza assoluta dagli aggiornamenti che si sono verificati nel database negli ultimi minuti e la concorrenza di query elevata è necessaria, usare la coerenza debole.

Ad esempio, la query seguente conta il numero di record di errore alla settimana negli ultimi 90 giorni. In questo caso, la coerenza debole è appropriata, poiché è improbabile che i record inseriti negli ultimi minuti vengano omessi dalle informazioni dettagliate.

my_table
| where timestamp between(ago(90d) .. now())
| where level == "error"
| summarize count() by level, startofweek(Timestamp)

Modalità di coerenza debole

La tabella seguente riepiloga le quattro modalità di coerenza delle query deboli.

Mode Descrizione
Casuale Le query vengono instradate in modo casuale a uno dei nodi del cluster che possono fungere da head di query coerente in modo debole.
Affinità per database Le query all'interno dello stesso database vengono instradate alla stessa testa di query coerente in modo debole, garantendo un'esecuzione coerente per tale database.
Affinità in base al testo della query Le query con lo stesso hash di testo della query vengono instradate alla stessa testa di query con coerenza debole, che è utile per sfruttare la memorizzazione nella cache delle query.
Affinità per ID sessione Le query con lo stesso hash ID sessione vengono instradate alla stessa testa di query coerente in modo debole, garantendo un'esecuzione coerente all'interno di una sessione.

Affinità per database

L'affinità in base alla modalità database garantisce che le query eseguite sullo stesso database vengano eseguite sulla stessa versione del database, anche se non necessariamente la versione più recente del database. Questa modalità è utile quando si garantisce un'esecuzione coerente all'interno di un database specifico è importante. Tuttavia, si verifica uno squilibrio nel numero di query tra database, quindi questa modalità può comportare una distribuzione del carico non uniforme.

Affinità in base al testo della query

L'affinità in base alla modalità testo della query è utile quando le query sfruttano la cache dei risultati della query. Questa modalità indirizza le query ripetute eseguite frequentemente dalla stessa identità alla stessa entità di query, consentendo loro di trarre vantaggio dai risultati memorizzati nella cache e riducendo il carico nel cluster.

Affinità per ID sessione

L'affinità in base alla modalità ID sessione garantisce che le query appartenenti alla stessa attività utente o sessione vengano eseguite sulla stessa versione del database, anche se non necessariamente quella più recente. Per usare questa modalità, l'ID sessione deve essere specificato in modo esplicito nelle proprietà della richiesta client di ogni query. Questa modalità è utile negli scenari in cui l'esecuzione coerente all'interno di una sessione è essenziale.

Come specificare la coerenza delle query

È possibile specificare la modalità di coerenza delle query tramite il client che invia la richiesta o usando un criterio lato server. Se non è specificato da nessuno dei due, viene applicata la modalità predefinita di coerenza assoluta.

  • Client che invia la richiesta: usare la queryconsistencyproprietà della richiesta client. Questo metodo imposta la modalità di coerenza delle query per una query specifica e non influisce sulla modalità di coerenza effettiva complessiva, determinata dal criterio predefinito o sul lato server. Per altre informazioni, vedere Proprietà della richiesta client.

  • Criterio lato server: usare la QueryConsistency proprietà dei criteri di coerenza delle query. Questo metodo imposta la modalità di coerenza delle query a livello di gruppo del carico di lavoro, eliminando la necessità che gli utenti specifichino la modalità di coerenza nelle proprietà della richiesta client e consentano di applicare le modalità di coerenza desiderate. Per altre informazioni, vedere Criteri di coerenza delle query.

Nota

Se si usa Kusto .NET SDK, è possibile impostare la coerenza delle query tramite il stringa di connessione. Questa impostazione verrà applicata a tutte le query inviate tramite tale particolare stringa di connessione. Per altre informazioni, vedere Proprietà della stringa di connessione.