Esistono strumenti e API che semplificano l'amministrazione dei dati archiviati di un'applicazione.
Console Google Cloud
Quando utilizzi la console Google Cloud, tieni presente che l'NDB viene implementato tramite Datastore e memcache. Quando NDB "legge" un valore, controlla prima memcache; legge da Datastore solo se non trova il valore in memcache.
Di conseguenza, se utilizzi la console Google Cloud per modificare un'entità in Datastore, l'applicazione potrebbe comunque utilizzare il valore "old" se questo valore si trova in memcache. Puoi aggirare il problema svuotando la cache memcache. Ciò è piuttosto invasivo, tuttavia; se hai bisogno di modificare spesso i valori "manualmente", potresti voler configurare un'interfaccia utente per questa operazione nell'applicazione che scriva i valori tramite la libreria client NDB; la scrittura tramite NDB mantiene Datastore e Memcache sincronizzati.
Query dei metadati
NDB supporta un'API di query sui metadati. Ciò consente a un'applicazione di ottenere alcune
informazioni generali sull'uso di Datastore. Questa API si trova nel modulo google.appengine.ext.ndb.metadata
. Ha le seguenti 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 dei 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 i nomi delle proprietà di mappatura dettati per il nome tipo specificato in elenchi di nomi di rappresentazione come "STRING", "BOOLEAN" o "INT64".
Queste funzioni hanno argomenti start e end facoltativi che possono essere utilizzati per limitare la query a un determinato intervallo. Qui, start è inclusivo, mentre end è esclusivo. Entrambi sono impostati in modo predefinito su 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, ad eccezione di get_namespaces()
, sono implicitamente limitati allo spazio dei nomi attuale. I metadati e le query vengono fatturati nello stesso modo in cui vengono recuperati e per le query di Datastore.
Query sulle statistiche
Datastore conserva le statistiche sui dati archiviati per un'applicazione, come 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 pagina Dashboard della console Google Cloud.
Puoi anche accedere a questi valori in modo programmatico all'interno dell'applicazione eseguendo query su entità con nomi speciali mediante l'API Datastore.
Ogni statistica è accessibile come un'entità il cui nome del tipo inizia e termina con due trattini bassi. Ad esempio, ogni app ha esattamente un'entità del tipo __Stat_Total__
che rappresenta le statistiche di tutte le entità nel datastore in totale. Ogni entità statistica ha le seguenti
proprietà:
count
, il numero di elementi considerati dalla statistica (un numero intero lungo)bytes
, la dimensione totale degli elementi di questa statistica (un numero intero lungo)timestamp
, l'ora dell'ultimo aggiornamento della statistica (un valore di data-ora)
Alcuni tipi di statistiche presentano anche proprietà aggiuntive, elencate di seguito.
Un'applicazione può utilizzare le classi di 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 statistico crea nuove entità statistiche, non elimina subito quelle precedenti. Il modo migliore per ottenere una visione coerente delle
statistiche è eseguire una query sull'entità
GlobalStat
con l'entità timestamp
più recente, quindi utilizzare il valore del timestamp come filtro quando recuperi altre
entità statistiche.
Le entità statistiche sono incluse nei valori statistici calcolati. Le entità statistiche occupano spazio rispetto al numero di tipi e nomi di proprietà univoci utilizzati dall'applicazione.
Il sistema delle statistiche creerà inoltre statistiche specifiche per ciascuno spazio dei nomi. Tieni presente che se un'applicazione non utilizza gli spazi dei nomi Datastore, non verranno create statistiche specifiche dello spazio dei nomi. Le statistiche specifiche per lo spazio dei nomi
si trovano nello spazio dei nomi per cui sono specifiche. I nomi dei tipi per le statistiche specifiche dello spazio dei nomi sono preceduti dal prefisso __Stat_Ns_
e hanno 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 ragionevole l'overhead associato all'archiviazione e all'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 proprietà:
__Stat_PropertyName_Kind__
,__Stat_PropertyType_PropertyName_Kind__
- statistiche per tipo e spazio dei nomi:
__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 di riepilogo (__Stat_Kind_CompositeIndex__
,
__Stat_PropertyType__
, __Stat_Total__
) non vengono mai eliminate.
L'elenco completo delle statistiche disponibili è il seguente:
Statistica | Tipo entità statistica | Descrizione |
---|---|---|
tutte le entità | __Stat_Total__ Classe Python: GlobalStat Voce specifica spazio dei nomi: __Stat_Ns_Total__ Classe Python: NamespaceGlobalStat |
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 in voci di indice integrate misurate in byte.• builtin_index_count : il conteggio delle voci di indice integrate.• composite_index_bytes : l'archiviazione in voci di indice composte misurata in byte.• composite_index_count : il conteggio delle voci di indici composti. |
tutte le entità in uno spazio dei nomi | __Stat_Namespace__ Classe Python: NamespaceStat Tieni presente che le entità __Stat_Namespace__ vengono create 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 in voci di indice integrate misurate in byte.• builtin_index_count : il conteggio delle voci di indice integrate.• composite_index_bytes : l'archiviazione in voci di indice composte misurata in byte.• composite_index_count : il conteggio delle voci di indici composti. |
tutte le voci negli indici definiti dall'applicazione | __Stat_Kind_CompositeIndex__ Voce specifica dello spazio dei nomi: __Stat_Ns_Kind_CompositeIndex__ Classe Python: KindStat |
Voci nella tabella dell'indice composto; 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__ Classe Python: KindStat Voce specifica dello spazio dei nomi: __Stat_Ns_Kind__ Classe Python: NamespaceKindStat |
Entità di un tipo: un'entità statistica 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 in voci di indice integrate misurate in byte.• builtin_index_count : il conteggio delle voci di indice integrate.• composite_index_bytes : l'archiviazione in voci di indice composte misurata in byte.• composite_index_count : il conteggio delle voci di indici composti. |
di entità radice di un tipo | __Stat_Kind_IsRootEntity__ Classe Python: KindRootEntityStat Voce specifica spazio dei nomi: __Stat_Ns_Kind_IsRootEntity__ Classe Python: NamespaceKindRootEntityStat |
Entità di un tipo che sono entità principali di un gruppo di entità (senza entità padre 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__ Classe Python: KindNotRootEntityStat Voce specifica spazio dei nomi: __Stat_Ns_Kind_NotRootEntity__ Classe Python: NamespaceKindNotRootEntityStat |
Entità di un tipo che non sono entità radice di gruppo di entità (hanno un'entità padre predecessante); 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__ Classe Python: PropertyTypeStat Voce specifica spazio dei nomi: __Stat_Ns_PropertyType__ Classe Python: NamespacePropertyTypeStat |
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 in voci di indice integrate misurate in byte.• builtin_index_count : il conteggio delle voci di indice integrate. |
proprietà di un tipo per tipo | __Stat_PropertyType_Kind__ Classe Python: KindPropertyTypeStat Voce specifica spazio dei nomi: __Stat_Ns_PropertyType_Kind__ Classe Python: NamespaceKindPropertyTypeStat |
Proprietà di un tipo di valore tra entità di un determinato tipo: un'entità statistica per 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__ Classe Python: KindPropertyNameStat Voce specifica spazio dei nomi: __Stat_Ns_PropertyName_Kind__ Classe Python: NamespaceKindPropertyNameStat |
Proprietà con un determinato nome in più entità di un determinato tipo: un'entità statistica per 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 in voci di indice integrate misurate in byte.• builtin_index_count : il conteggio delle voci di indice integrate. |
proprietà di un tipo e con un nome | __Stat_PropertyType_PropertyName_Kind__ Classe Python: KindPropertyNamePropertyTypeStat Voce specifica spazio dei nomi: __Stat_Ns_PropertyType_PropertyName_Kind__ Classe Python: NamespaceKindPropertyNamePropertyTypeStat |
Proprietà con un nome specifico e di un determinato tipo di valore nelle entità di un determinato tipo: un'entità statistica per combinazione di nome 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 in voci di indice integrate misurate in byte.• builtin_index_count : il conteggio delle voci di indice integrate. |
Alcune statistiche fanno riferimento ai tipi di valori delle proprietà Datastore in base al 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"