Amministrazione NDB

Esistono strumenti e API per semplificare l'amministrazione dei dati archiviati di un'applicazione.

Google Cloud Console

Quando utilizzi la Google Cloud console, ricorda che NDB viene implementato tramite mezzo di Datastore e memcache. Quando NDB "legge" un valore, controlla prima memcache; legge da Datastore solo se non trova il valore in memcache.

Pertanto, se utilizzi la Google Cloud console per modificare un'entità in Datastore, l'applicazione potrebbe comunque utilizzare il "vecchio" valore se questo si trova in memcache. Puoi aggirare il problema eliminando memcache. Tuttavia, questa operazione è piuttosto invasiva. Se devi modificare spesso i valori "a mano", ti consigliamo di configurare un'interfaccia utente nella tua applicazione che scriva 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 dei metadati. Ciò consente a un'applicazione di ottenere alcune informazioni generali sul suo utilizzo di Datastore. Questa API si trova in il google.appengine.ext.ndb.metadata modulo. Ha le seguenti funzioni:

  • get_namespaces(start=None, end=None): restituisce un elenco di nomi di spazi dei nomi
  • get_kinds(start=None, end=None): restituisce un elenco di nomi di tipi
  • get_properties_of_kind(kind, start=None, end=None): restituisce un elenco di nomi di proprietà per il nome del tipo specificato
  • get_representations_of_kind(kind, start=None, end=None): restituisce un dizionario che mappa i nomi delle proprietà per il nome del tipo specificato agli elenchi di nomi di rappresentazione come STRING, BOOLEAN o INT64.

Queste funzioni hanno argomenti start ed end facoltativi che possono essere utilizzati per limitare la query a un determinato intervallo. In questo caso, start è inclusivo ed end è esclusivo. Il valore predefinito di 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)). Tutte queste funzioni, tranne get_namespaces(), sono implicitamente limitate allo spazio dei nomi corrente. Le operazioni di recupero e le query dei metadati vengono fatturate allo stesso modo delle operazioni di recupero e delle query di Datastore.

Query delle statistiche

Datastore gestisce le statistiche sui dati archiviati per un'applicazione, ad esempio il numero di entità di un determinato tipo o la quantità di spazio utilizzato dai valori delle proprietà di un determinato tipo. Puoi visualizzare queste statistiche nella Google Cloud console, nella pagina Dashboard.

Puoi anche accedere a questi valori a livello di programmazione all'interno dell'applicazione eseguendo query sulle 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à del 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 considerati dalla statistica (un intero lungo)
  • bytes, la dimensione totale degli elementi per questa statistica (un intero lungo)
  • timestamp, l'ora dell'ultimo aggiornamento 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 di modelli 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 immediatamente quelle precedenti. Il modo migliore per ottenere una visualizzazione coerente delle statistiche è eseguire una query sull' GlobalStat entità con il timestamp più recente, quindi utilizzare questo valore di timestamp come filtro quando recuperi altre entità statistiche.

Le entità statistiche sono incluse nei valori delle statistiche calcolate. Le entità statistiche occupano spazio in base al numero di tipi e nomi di proprietà univoci 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 di Datastore, non verranno create statistiche specifiche per lo spazio dei nomi. Le statistiche specifiche per lo spazio dei nomi si trovano nello spazio dei nomi a cui si riferiscono. I nomi dei tipi per le statistiche specifiche per lo 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 ragionevole l'overhead 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à statistiche di riepilogo (__Stat_Kind_CompositeIndex__, __Stat_PropertyType__, __Stat_Total__) non vengono mai eliminate.

Di seguito è riportato l'elenco completo delle statistiche disponibili:

Statistica Tipo di entità statistica Descrizione
Tutte le entità __Stat_Total__
Voce specifica per lo spazio dei nomi:
__Stat_Ns_Total__
Tutte le entità. Proprietà aggiuntive:

entity_bytes: l'archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: l'archiviazione nelle voci degli indici integrati misurata in byte.
builtin_index_count: il conteggio delle voci degli indici integrati.
composite_index_bytes: l'archiviazione nelle voci degli indici composti misurata 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 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: l'archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: l'archiviazione nelle voci degli indici integrati misurata in byte.
builtin_index_count: il conteggio delle voci degli indici integrati.
composite_index_bytes: l'archiviazione nelle voci degli indici composti misurata in byte.
composite_index_count: il conteggio delle voci degli indici composti.
Tutte le voci negli indici definiti dall'applicazione __Stat_Kind_CompositeIndex__
Voce specifica per lo spazio dei nomi: __Stat_Ns_Kind_CompositeIndex__
Informazioni sugli indici composti nel database; un'entità statistica per ogni indice composto. Proprietà aggiuntive:

index_id, l'ID dell'indice.
kind_name, il nome del tipo rappresentato (una stringa)
Entità di un tipo __Stat_Kind__
Voce specifica per lo spazio dei nomi:
__Stat_Ns_Kind__
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: l'archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: l'archiviazione nelle voci degli indici integrati misurata in byte.
builtin_index_count: il conteggio delle voci degli indici integrati.
composite_index_bytes: l'archiviazione nelle voci degli indici composti misurata in byte.
composite_index_count: il conteggio delle voci degli indici composti.
Entità root di un tipo __Stat_Kind_IsRootEntity__
Voce specifica per lo spazio dei nomi:
__Stat_Ns_Kind_IsRootEntity__
Entità di un tipo che sono entità base del gruppo di entità (non hanno un elemento principale predecessore); un'entità statistica per ogni tipo di entità archiviata. Proprietà aggiuntive:

kind_name, il nome del tipo rappresentato (una stringa)
entity_bytes: l'archiviazione nella tabella delle entità misurata in byte.
Entità non root di un tipo __Stat_Kind_NotRootEntity__
Voce specifica per lo spazio dei nomi:
__Stat_Ns_Kind_NotRootEntity__
Entità di un tipo che non sono entità base del gruppo di entità (hanno un elemento principale predecessore); un'entità statistica per ogni tipo di entità archiviata. Proprietà aggiuntive:

kind_name, il nome del tipo rappresentato (una stringa)
entity_bytes: l'archiviazione nella tabella delle entità misurata in byte.
Proprietà di un tipo __Stat_PropertyType__
Voce specifica per lo 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: l'archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: l'archiviazione nelle voci degli indici integrati misurata in byte.
builtin_index_count: il conteggio delle voci degli indici integrati.
Proprietà di un tipo per tipo __Stat_PropertyType_Kind__
Voce specifica per lo spazio dei nomi:
__Stat_Ns_PropertyType_Kind__
Proprietà di un tipo di valore in entità di un determinato tipo; un'entità statistica per combinazione di tipo di proprietà e tipo. Proprietà aggiuntive:

property_type, il nome del tipo di valore (una stringa)
kind_name, il nome del tipo rappresentato (una stringa)
entity_bytes: l'archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: l'archiviazione nell'indice integrato misurata in byte.
builtin_index_count: il conteggio delle voci degli indici integrati.
Proprietà con un nome __Stat_PropertyName_Kind__
Voce specifica per lo spazio dei nomi:
__Stat_Ns_PropertyName_Kind__
Proprietà con un determinato nome in entità di un determinato tipo; un'entità statistica per combinazione di nome di proprietà e tipo univoci. Proprietà aggiuntive:

property_name, il nome della proprietà (una stringa)
kind_name, il nome del tipo rappresentato (una stringa)
entity_bytes: l'archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: l'archiviazione nelle voci degli indici integrati misurata in byte.
builtin_index_count: il conteggio delle voci degli indici integrati.
Proprietà di un tipo e con un nome __Stat_PropertyType_PropertyName_Kind__
Voce specifica per lo spazio dei nomi:
__Stat_Ns_PropertyType_PropertyName_Kind__
Proprietà con un determinato nome e di un determinato tipo di valore in entità di un determinato tipo; un'entità statistica per combinazione di nome di 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: l'archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: l'archiviazione nelle voci degli indici integrati misurata in byte.
builtin_index_count: il conteggio delle voci degli indici integrati.

Alcune statistiche fanno riferimento ai tipi di valori delle proprietà di 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"