Una query Datastore recupera le entità da Cloud Datastore che soddisfano un insieme specificato di condizioni.
Una query tipica include quanto segue:
- Un tipo di entità a cui si applica la query
- Filtri facoltativi basati su valori, chiavi e antenati delle proprietà delle entità
- Ordini facoltativi per sequenziare i risultati
Questa pagina descrive la struttura e i tipi di query utilizzati in App Engine per per recuperare i dati da Cloud Datastore.
Filtri
I filtri di una query impostano vincoli su proprietà, chiavi e antenati delle entità da recuperare.
Filtri proprietà
Un filtro proprietà specifica
- Un nome di proprietà
- Un operatore di confronto
- Un valore della proprietà
Il valore della proprietà deve essere fornito dall'applicazione; non può fare riferimento a o essere calcolato in termini di altre proprietà. Un'entità soddisfa il filtro se ha una proprietà del nome specificato il cui valore è confrontato con quello specificato il filtro nel modo descritto dall'operatore di confronto.
L'operatore di confronto può essere uno dei seguenti:
Operatore | Significato |
---|---|
= |
Uguale a |
< |
Minore di |
<= |
Minore o uguale a |
> |
Maggiore di |
>= |
Maggiore o uguale a |
Filtri principali
Per filtrare in base al valore della chiave di un'entità, utilizza la proprietà speciale __key__
:
Quando si esegue il confronto per verificare l'ineguaglianza, le chiavi vengono ordinate in base ai seguenti criteri:
- Percorso predecessore
- Tipo di entità
- Identificatore (nome della chiave o ID numerico)
Gli elementi del percorso dell'antenato vengono confrontati in modo simile: per tipo (stringa), poi per nome della chiave o ID numerico. Tipi e nomi di chiavi sono stringhe e sono ordinati per valore byte; Gli ID numerici sono numeri interi e sono ordinati numericamente. Se le entità con gli stessi valori padre e tipo utilizzano una combinazione di stringhe di nomi chiave e ID numerici, quelli con ID numerici precedono quelli con i nomi delle chiavi.
Le query sulle chiavi utilizzano gli indici come le query sulle proprietà e richiedono gli indici personalizzati negli stessi casi, con un paio di eccezioni: i filtri di disuguaglianza o un ordinamento crescente per la chiave non richiedono un indice personalizzato, ma un ordinamento decrescente per la chiave sì. Come per tutte le query, il server web di sviluppo crea voci appropriate nel file di configurazione dell'indice quando viene testata una query che richiede un indice personalizzato.
Filtri predecessori
Puoi filtrare le query Datastore in base a un predecessore specificato in modo che i risultati restituiti includano solo le entità discendenti di tale predecessore:
Tipi di query speciali
Alcuni tipi specifici di query meritano una menzione speciale:
Query gentili
Una query senza tipo e senza filtro di antenato recupera tutte le entità di un'applicazione da Datastore. Sono incluse le entità create e gestite da altre funzionalità di App Engine, ad esempio le entità statistiche e le entità di metadati di Blobstore (se presenti). Queste query senza tipo non possono includere filtri o ordini di ordinamento in base ai valori delle proprietà. Tuttavia, possono filtrare in base alle chiavi entità specificando __key__
come nome della proprietà:
Query sui predecessori
Una query con un filtro predecessore limita i risultati all'entità specificata e ai suoi discendenti:
Query predecessori Kindless
Una query senza tipo che include un filtro per l'antenato recupera l'antenato specificato e tutti i suoi discendenti, indipendentemente dal tipo. Questo tipo di query non richiede indici personalizzati. Come tutte le query senza tipo, non può includere filtri o ordini di ordinamento in base ai valori delle proprietà, ma può filtrare in base alla chiave dell'entità:
L'esempio seguente illustra come recuperare tutte le entità discendenti da un dato predecessore:
Query basate solo su chiavi
Una query basata solo su chiavi restituisce solo le chiavi delle entità di risultato anziché le entità stesse, con una latenza e un costo inferiori rispetto al recupero di entità intere:
Spesso è più economico eseguire prima una query solo per le chiavi e poi recuperare un sottoinsieme di entità dai risultati, anziché eseguire una query generale che potrebbe recuperare più entità di quelle di cui hai bisogno.
Tieni presente che una query basata solo su chiavi può restituire più di 1000 risultati, ma
GetAll
può recuperare solo 1000 chiavi alla volta,
e restituisce un errore se viene richiamato su un risultato più grande.
Consigliamo quindi di aggiungere alla query un limite di 1000 chiavi.
Query di proiezione
A volte, tutto ciò che ti serve dai risultati di una query sono i valori di alcune proprietà specifiche. In questi casi, puoi utilizzare una query di proiezione per recuperare solo le proprietà che ti interessano davvero, con una latenza inferiore e costi aggiuntivi rispetto al recupero dell'intera entità; consulta la pagina Query di proiezione per maggiori dettagli.
Ordina
Un ordinamento della query specifica
- Un nome di proprietà
- Una direzione di ordinamento (crescente o decrescente)
In Go, l'ordinamento decrescente è indicato da un trattino (-
)
precedente il nome della proprietà. Se ometti il trattino, viene specificato l'ordinamento crescente per
impostazione predefinita. Ad esempio:
Se una query include più ordini di ordinamento, questi vengono applicati nella sequenza specificata. L'esempio seguente ordina prima per cognome in ordine crescente e poi per altezza in ordine decrescente:
Se non viene specificato alcun ordinamento, i risultati vengono restituiti nell'ordine in cui recuperate da Datastore.
Nota: per via del modo Datastore esegue le query, se una query specifica filtri di disuguaglianza su una proprietà e ordina le altre, la proprietà utilizzata nella I filtri di disuguaglianze devono essere ordinati prima delle altre proprietà.
Indici
Ogni query Datastore calcola i propri risultati utilizzando uno o più indici contenenti chiavi di entità in una sequenza specificata dalle proprietà dell'indice e, facoltativamente, i predecessori dell'entità. Gli indici vengono aggiornati in modo incrementale per riflettere eventuali modifiche apportate dall'applicazione alle sue entità, in modo che i risultati corretti di tutte le query siano disponibili senza ulteriori calcoli.
App Engine predefinisce un indice semplice per ogni proprietà di un'entità.
Un'applicazione App Engine può definire ulteriori indici personalizzati in un
file di configurazione
dell'indice denominato
index.yaml
. Il server di sviluppo aggiunge automaticamente suggerimenti a questo file quando rileva query che non possono essere eseguite con gli indici esistenti.
Puoi ottimizzare gli indici manualmente modificando il file prima di caricare l'applicazione.
Esempio di interfaccia di query
L'API Go Datastore fornisce un tipo di query per la preparazione e l'esecuzione delle query.
Passaggi successivi
- Scopri come specificare cosa restituisce una query e come controllare ulteriormente i risultati.
- Scopri le limitazioni comuni per le query su Cloud Datastore.
- Scopri di più sui cursori di query, che consentono a un'applicazione di recuperare i risultati di una query in comodi batch.
- Comprendi la coerenza dei dati e il funzionamento della coerenza dei dati con diversi tipi di query su Cloud Datastore.