Amministrazione NDB

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

Google Cloud Console

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

Pertanto, se utilizzi Cloud Console per modificare un'entità in Datastore, l'applicazione potrebbe comunque utilizzare il valore "old" se il valore è in memcache. Potresti risolvere il problema svuotando la cache. Tuttavia, questa soluzione è piuttosto fastidiosa. Se devi modificare manualmente i valori, spesso è consigliabile impostare una UI per questa applicazione per scrivere 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. Ciò consente a un'applicazione di ottenere alcune informazioni generali sull'utilizzo di Datastore. Questa API si trova nel modulo google.appengine.ext.ndb.metadata. Offre funzioni:

  • get_namespaces(start=None, end=None): restituire un elenco di nomi di spazio dei nomi
  • get_kinds(start=None, end=None): restituisce un elenco di nomi simili
  • get_properties_of_kind(kind, start=None, end=None): restituisce un elenco di nomi di proprietà per il nome di tipo specificato
  • get_representations_of_kind(kind, start=None, end=None): restituisce i nomi delle proprietà di una dettatura per il nome di tipo specificato agli elenchi di nomi di rappresentazione come 'STRING' 'BOOLEAN' o 'INT64'.

Queste funzioni contengono argomenti start e end facoltativi che possono essere utilizzati per limitare la query a un determinato intervallo. Qui, start è inclusivo e end è esclusivo. Entrambi utilizzano per impostazione predefinita None. Ad esempio, per iniziare con tutti gli spazi dei nomi con una lettera minuscola, puoi chiamare get_namespaces('a', chr(ord('z') + 1)). Tutti questi elementi tranne get_namespaces() sono implicitamente limitati allo spazio dei nomi attuale. I metadati e le query vengono fatturati allo stesso modo di quelli di Datastore e delle query.

Query statistiche

Datastore conserva le statistiche sui dati archiviati per un'applicazione, ad esempio quante entità esistono di un determinato tipo o la quantità di spazio utilizzata dai valori di proprietà di un determinato tipo. Puoi visualizzare queste statistiche in Cloud Console, nella pagina Dashboard.

Puoi inoltre accedere a questi valori in modo programmatico all'interno dell'applicazione eseguendo query per entità denominate in modo specifico utilizzando l'API Datastore. Ogni statistica è accessibile come entità il cui nome di tipo inizia e termina con due trattini bassi. Ad esempio, ogni app ha esattamente un'entità del tipo __Stat_Total__ che rappresenta in totale le statistiche su tutte le entità in Datastore. Ogni entità statistica ha le seguenti proprietà:

  • count, il numero di articoli considerati dalla statistica (un numero intero lungo)
  • bytes, la dimensione totale degli articoli 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 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 delle statistiche crea nuove entità statistiche, non elimina immediatamente quelle vecchie. Il modo migliore per ottenere una visualizzazione coerente delle statistiche è eseguire una query per l'entità GlobalStat con l'elemento timestamp più recente, quindi utilizzare il valore timestamp come filtro durante il recupero di altre entità statistiche.

Le entità statistiche sono incluse nei valori statistici calcolati. Le entità statistiche occupano spazio in relazione al numero di tipi e nomi delle proprietà univoci utilizzati dall'applicazione.

Il sistema delle 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 gli spazi dei nomi. Le statistiche specifiche dello spazio dei nomi sono disponibili nello spazio dei nomi specifico. 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 un overhead di archiviazione e aggiornamento delle statistiche ragionevole, Datastore rilascia gradualmente le entità delle 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 natura 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 natura: __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.

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

Statistica Tipo entità Stat Descrizione
tutte le entità __Stat_Total__
Lezione di Python: GlobalStat
Voce specifica dello spazio dei nomi:
__Stat_Ns_Total__
Lezione di Python: NamespaceGlobalStat
Tutte le entità. Proprietà aggiuntive:

entity_bytes: lo spazio di archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: spazio di archiviazione nelle voci degli indici integrati misurate in byte.
builtin_index_count: conteggio delle voci di indice integrate.
composite_index_bytes: spazio di archiviazione in voci degli indici composti misurate in byte.
composite_index_count: il numero di voci degli indici composti.
tutte le entità in uno spazio dei nomi __Stat_Namespace__
Classe Python: NamespaceStat
tieni presente che __Stat_Namespace__ vengono create per ogni spazio dei nomi rilevato e si trovano solo nello spazio dei nomi delle stringhe vuote.
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à misurata in byte.
builtin_index_bytes: spazio di archiviazione nelle voci degli indici integrati misurate in byte.
builtin_index_count: conteggio delle voci di indice integrate.
composite_index_bytes: spazio di archiviazione in voci degli indici composti misurate in byte.
composite_index_count: il numero di voci degli indici composti.
tutte le voci negli indici definiti dall'applicazione __Stat_Kind_CompositeIndex__
Voce specifica dello spazio dei nomi: __Stat_Ns_Kind_CompositeIndex__

Lezione di Python: KindStat
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__
Lezione di Python: KindStat
Voce specifica dello spazio dei nomi:
__Stat_Ns_Kind__
Lezione di 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à misurata in byte.
builtin_index_bytes: spazio di archiviazione nelle voci degli indici integrati misurate in byte.
builtin_index_count: conteggio delle voci di indice integrate.
composite_index_bytes: spazio di archiviazione in voci degli indici composti misurate in byte.
composite_index_count: il numero di voci degli indici composti.
entità principali di un tipo __Stat_Kind_IsRootEntity__
Lezione di Python: KindRootEntityStat
Voce specifica dello spazio dei nomi:
__Stat_Ns_Kind_IsRootEntity__
Lezione di Python: NamespaceKindRootEntityStat
Entità di tipo che sono entità radice dei gruppi di entità (senza padre principale); 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à misurata in byte.
entità non radice di un tipo __Stat_Kind_NotRootEntity__
Lezione di Python: KindNotRootEntityStat
Voce specifica dello spazio dei nomi:
__Stat_Ns_Kind_NotRootEntity__
Lezione di Python: NamespaceKindNotRootEntityStat
Entità di tipo diverso da entità principali del gruppo di entità (con un elemento padre dell'antenato); un'entità stat per ciascun 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à misurata in byte.
proprietà di un tipo __Stat_PropertyType__
Lezione di Python: PropertyTypeStat
Voce specifica dello spazio dei nomi:
__Stat_Ns_PropertyType__
Lezione di Python: NamespacePropertyTypeStat
Proprietà di un tipo di valore in tutte le entità; una sola 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à misurata in byte.
builtin_index_bytes: spazio di archiviazione nelle voci degli indici integrati misurate in byte.
builtin_index_count: conteggio delle voci di indice integrate.
proprietà di un tipo per tipo __Stat_PropertyType_Kind__
Lezione di Python: KindPropertyTypeStat
Voce specifica dello spazio dei nomi:
__Stat_Ns_PropertyType_Kind__
Lezione di Python: NamespaceKindPropertyTypeStat
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: lo spazio di archiviazione nella tabella delle entità misurata in byte.
builtin_index_bytes: spazio di archiviazione nell'indice integrato, misurato in byte.
builtin_index_count: conteggio delle voci di indice integrate.
proprietà con un nome __Stat_PropertyName_Kind__
Lezione di Python: KindPropertyNameStat
Voce specifica dello spazio dei nomi:
__Stat_Ns_PropertyName_Kind__
Lezione di Python: NamespaceKindPropertyNameStat
Proprietà con un determinato nome in 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à misurata in byte.
builtin_index_bytes: spazio di archiviazione nelle voci degli indici integrati misurate in byte.
builtin_index_count: conteggio delle voci di indice integrate.
proprietà di un tipo e con un nome __Stat_PropertyType_PropertyName_Kind__
Lezione di Python: KindPropertyNamePropertyTypeStat
Voce specifica dello spazio dei nomi:
__Stat_Ns_PropertyType_PropertyName_Kind__
Lezione di Python: NamespaceKindPropertyNamePropertyTypeStat
Proprietà con un determinato nome e un determinato tipo di valore in entità di un determinato tipo; un'entità stat 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à misurata in byte.
builtin_index_bytes: spazio di archiviazione nelle voci degli indici integrati misurate in byte.
builtin_index_count: conteggio delle voci di indice integrate.

Alcune statistiche fanno riferimento ai tipi di valore 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"