Esistono strumenti e API per semplificare l'amministrazione dei dati archiviati di un'applicazione.
ConsoleGoogle Cloud
Quando utilizzi Google Cloud console, ricorda che NDB viene implementato tramite Datastore e memcache. Quando NDB "legge" un valore, controlla prima la memcache; legge da Datastore solo se non trova il valore nella memcache.
Pertanto, se utilizzi la console Google Cloud per modificare un'entità in Datastore, l'applicazione potrebbe comunque utilizzare il valore "vecchio" se questo valore è in memcache. Puoi aggirare il problema eliminando la memcache. Questa operazione è piuttosto distruttiva, tuttavia; se devi modificare spesso i valori "a mano", ti consigliamo di configurare un'interfaccia utente per questa operazione nella tua applicazione che scrive i valori tramite la libreria client NDB; la scrittura tramite NDB mantiene sincronizzati Datastore e memcache.
Query dei metadati
NDB supporta un'API di query sui metadati. Consente a un'applicazione di ottenere alcune
informazioni generali sul suo utilizzo di Datastore. Questa API si trova nel modulo google.appengine.ext.ndb.metadata. Ha funzioni:
get_namespaces(start=None, end=None): restituisce un elenco di nomi di spazi dei nomiget_kinds(start=None, end=None): restituisce un elenco di nomi di tipiget_properties_of_kind(kind, start=None, end=None): restituisce un elenco di nomi di proprietà per il nome kind specificatoget_representations_of_kind(kind, start=None, end=None): restituisce un dizionario che mappa i nomi delle proprietà per il nome del tipo specificato a elenchi di nomi di rappresentazione comeSTRING,BOOLEANoINT64.
Queste funzioni hanno argomenti start e end facoltativi che possono essere utilizzati per
limitare la query a un determinato intervallo. In questo caso, start è inclusivo e end è
esclusivo. Il valore predefinito per entrambi è None. Ad esempio, per ottenere tutti gli spazi dei nomi che iniziano
con una lettera minuscola, puoi chiamare get_namespaces('a', chr(ord('z') + 1)).
Tutti questi, tranne get_namespaces(), sono implicitamente limitati allo spazio dei nomi attuale. Le operazioni di recupero e le query sui metadati vengono fatturate allo stesso modo delle operazioni di recupero e delle query di Datastore.
Query sulle statistiche
Datastore gestisce statistiche sui dati archiviati per un'applicazione, ad esempio il numero di entità di un determinato tipo o la quantità di spazio utilizzata dai valori delle proprietà di un determinato tipo. Puoi visualizzare queste statistiche nella console Google Cloud , nella pagina Dashboard.
Puoi anche accedere a questi valori in modo programmatico all'interno dell'applicazione eseguendo query per entità con nomi speciali utilizzando l'API Datastore.
Ogni statistica è accessibile come entità il cui nome del tipo inizia e termina con
due trattini bassi. Ad esempio, ogni app ha esattamente un'entità di tipo
__Stat_Total__ che rappresenta le statistiche su tutte le entità in
Datastore in totale. Ogni entità statistica ha le seguenti proprietà:
count, il numero di elementi presi in considerazione dalla statistica (un numero intero lungo)bytes, la dimensione totale degli elementi per questa statistica (un numero intero lungo)timestamp, l'ora dell'aggiornamento più recente della statistica (un valore di data e ora)
Alcuni tipi di statistiche hanno anche proprietà aggiuntive, elencate di seguito.
Un'applicazione può utilizzare le classi modello fornite dal pacchetto
google.appengine.ext.ndb.stats per accedere alle entità statistiche.
from google.appengine.ext.ndb import stats
global_stat = stats.GlobalStat.query().get()
print 'Total bytes stored: %d' % global_stat.bytes
print 'Total entities stored: %d' % global_stat.count
Quando il sistema di statistiche crea nuove entità statistiche, non elimina
subito quelle precedenti. Il modo migliore per ottenere una visualizzazione coerente delle statistiche è eseguire una query per l'entità
GlobalStatcon il timestamp più recente, quindi utilizzare questo valore timestamp come filtro quando recuperi altre entità statistiche.
Le entità statistiche sono incluse nei valori statistici calcolati. Le entità statistiche occupano spazio in base al numero di tipi unici e ai nomi delle proprietà utilizzati dall'applicazione.
Il sistema di statistiche creerà anche statistiche specifiche per ogni
spazio dei nomi. Tieni presente che se un'applicazione non utilizza gli spazi dei nomi Datastore,
non verranno create statistiche specifiche per lo spazio dei nomi. Le statistiche specifiche dello spazio dei nomi
si trovano nello spazio dei nomi a cui si riferiscono. I nomi dei tipi per le statistiche specifiche dello spazio dei nomi hanno il prefisso __Stat_Ns_ e lo stesso suffisso corrispondente dei tipi di statistiche a livello di applicazione.
Le applicazioni con migliaia di spazi dei nomi, tipi o nomi di proprietà richiedono un numero molto elevato di entità statistiche. Per mantenere ragionevoli i costi generali di archiviazione e aggiornamento delle statistiche, Datastore elimina progressivamente le entità statistiche, nel seguente ordine:
- statistiche per spazio dei nomi, per tipo e per proprietà:
__Stat_Ns_PropertyName_Kind__,__Stat_Ns_PropertyType_PropertyName_Kind__ - statistiche per tipo e per proprietà:
__Stat_PropertyName_Kind__,__Stat_PropertyType_PropertyName_Kind__ - Statistiche per spazio dei nomi e per tipo:
__Stat_Ns_Kind__,__Stat_Ns_Kind_IsRootEntity__,__Stat_Ns_Kind_NotRootEntity__,__Stat_Ns_PropertyType_Kind__ - Statistiche per tipo:
__Stat_Kind__,__Stat_Kind_IsRootEntity__,__Stat_Kind_NotRootEntity__,__Stat_PropertyType_Kind__ - statistiche per spazio dei nomi:
__Stat_Namespace__,__Stat_Ns_Kind_CompositeIndex__,__Stat_Ns_PropertyType__,__Stat_Ns_Total__
Le entità delle statistiche riepilogative (__Stat_Kind_CompositeIndex__,
__Stat_PropertyType__, __Stat_Total__) non vengono mai eliminate.
Di seguito è riportato l'elenco completo delle statistiche disponibili:
| Statistica | Tipo di entità delle statistiche | Descrizione |
|---|---|---|
| tutte le entità | __Stat_Total__ Voce specifica dello spazio dei nomi: __Stat_Ns_Total__ |
Tutte le entità. Proprietà aggiuntive: • entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte.• builtin_index_bytes: Lo spazio di archiviazione nelle voci di indice integrate misurato in byte.• builtin_index_count: il conteggio delle voci di indice integrate.• composite_index_bytes: lo spazio di archiviazione nelle voci dell'indice composito misurato in byte.• composite_index_count: il conteggio delle voci degli indici composti. |
| tutte le entità in uno spazio dei nomi | __Stat_Namespace__ tieni presente che vengono create entità __Stat_Namespace__ per ogni spazio dei nomi rilevato e si trovano solo nello spazio dei nomi della stringa vuota. |
Tutte le entità in uno spazio dei nomi. • subject_namespace, lo spazio dei nomi rappresentato (una stringa)• entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte.• builtin_index_bytes: Lo spazio di archiviazione nelle voci di indice integrate misurato in byte.• builtin_index_count: il conteggio delle voci di indice integrate.• composite_index_bytes: lo spazio di archiviazione nelle voci dell'indice composito misurato in byte.• composite_index_count: il conteggio delle voci degli indici composti. |
| tutte le voci negli indici definiti nell'applicazione | __Stat_Kind_CompositeIndex__Voce specifica dello spazio dei nomi: __Stat_Ns_Kind_CompositeIndex__ |
Voci nella tabella dell'indice composito; un'entità statistica per ogni tipo di entità archiviata. Proprietà aggiuntive: • index_id, l'ID indice.• kind_name, il nome del tipo rappresentato (una stringa) |
| entità di un tipo | __Stat_Kind__ Voce specifica dello spazio dei nomi: __Stat_Ns_Kind__ |
Entità di un tipo; un'entità stat per ogni tipo di entità archiviata. Proprietà aggiuntive: • kind_name, il nome del tipo rappresentato (una stringa)• entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte.• builtin_index_bytes: Lo spazio di archiviazione nelle voci di indice integrate misurato in byte.• builtin_index_count: il conteggio delle voci di indice integrate.• composite_index_bytes: lo spazio di archiviazione nelle voci dell'indice composito misurato in byte.• composite_index_count: il conteggio delle voci degli indici composti. |
| entità radice di un tipo | __Stat_Kind_IsRootEntity__ Voce specifica dello spazio dei nomi: __Stat_Ns_Kind_IsRootEntity__ |
Entità di un tipo che sono entità radice del gruppo di entità (non hanno un elemento principale predecessore); un'entità stat per ogni tipo di entità archiviata. Proprietà aggiuntive: • kind_name, il nome del tipo rappresentato (una stringa)• entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte. |
| entità non radice di un tipo | __Stat_Kind_NotRootEntity__ Voce specifica dello spazio dei nomi: __Stat_Ns_Kind_NotRootEntity__ |
Entità di un tipo che non sono entità radice del gruppo di entità (hanno un elemento principale predecessore); un'entità stat per ogni tipo di entità archiviata. Proprietà aggiuntive: • kind_name, il nome del tipo rappresentato (una stringa)• entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte. |
| proprietà di un tipo | __Stat_PropertyType__ Voce specifica dello spazio dei nomi: __Stat_Ns_PropertyType__ |
Proprietà di un tipo di valore in tutte le entità; un'entità statistica per tipo di valore. Proprietà aggiuntive: • property_type, il nome del tipo di valore (una stringa)• entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte.• builtin_index_bytes: Lo spazio di archiviazione nelle voci di indice integrate misurato in byte.• builtin_index_count: il conteggio delle voci di indice integrate. |
| proprietà di un tipo per genere | __Stat_PropertyType_Kind__ Voce specifica dello spazio dei nomi: __Stat_Ns_PropertyType_Kind__ |
Proprietà di un tipo di valore tra le entità di un determinato tipo; un'entità statistica per ogni combinazione di tipo e tipo di proprietà. Proprietà aggiuntive: • property_type, il nome del tipo di valore (una stringa)• kind_name, il nome del tipo rappresentato (una stringa)• entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte.• builtin_index_bytes: Lo spazio di archiviazione nell'indice integrato misurato in byte.• builtin_index_count: il conteggio delle voci di indice integrate. |
| proprietà con un nome | __Stat_PropertyName_Kind__ Voce specifica dello spazio dei nomi: __Stat_Ns_PropertyName_Kind__ |
Proprietà con un determinato nome tra le entità di un determinato tipo; un'entità stat per ogni combinazione di nome e tipo di proprietà univoci. Proprietà aggiuntive: • property_name, il nome della proprietà (una stringa)• kind_name, il nome del tipo rappresentato (una stringa)• entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte.• builtin_index_bytes: Lo spazio di archiviazione nelle voci di indice integrate misurato in byte.• builtin_index_count: il conteggio delle voci di indice integrate. |
| proprietà di un tipo e con un nome | __Stat_PropertyType_PropertyName_Kind__ Voce specifica dello spazio dei nomi: __Stat_Ns_PropertyType_PropertyName_Kind__ |
Proprietà con un determinato nome e di un determinato tipo di valore tra le entità di un determinato tipo; un'entità statistica per ogni combinazione di nome della proprietà, tipo di valore e tipo esistente in Datastore. Proprietà aggiuntive: • property_type, il nome del tipo di valore (una stringa)• property_name, il nome della proprietà (una stringa)• kind_name, il nome del tipo rappresentato (una stringa)• entity_bytes: lo spazio di archiviazione nella tabella delle entità misurato in byte.• builtin_index_bytes: Lo spazio di archiviazione nelle voci di indice integrate misurato in byte.• builtin_index_count: il conteggio delle voci di indice integrate. |
Alcune statistiche fanno riferimento ai tipi di valori delle proprietà Datastore per nome, come stringhe. Questi nomi sono i seguenti:
"Blob""BlobKey""Boolean""Category""Date/Time""Email""Float""GeoPt""IM""Integer""Key""Link""NULL""PhoneNumber""PostalAddress""Rating""ShortBlob""String""Text""User"