Sto leggendo su Google App Engine raggruppa molti utenti (Fig1, Fig2, Fig3) che non riescono a capire da dove proviene l'elevato numero di dati Datastore nei loro rapporti di fatturazione.
Come forse sapete, lo Datastore reads ha un limite di 50.000 ore/giorno, oltre questo budget è necessario pagare.Quante letture di Datastore consumano ogni operazione di recupero, conteggio e query?
Le operazioni 50 K sembrano molte risorse, ma sfortunatamente sembra che ogni operazione (Query, Entity fetch, Count ..), nasconda diverse letture di Datastore.
È possibile conoscere tramite API o qualche altro approccio, quante letture di Datastore sono nascoste dietro le comuni chiamate RPC.get
, RPC.runquery
?
Appstats sembra inutile in questo caso perché fornisce solo i dettagli RPC e non il costo nascosto delle letture.
Avere un semplice modello come questo:
class Example(db.Model):
foo = db.StringProperty()
bars= db.ListProperty(str)
e entità del datastore, mi interessa il costo di questo tipo di operazioni:
items_count = Example.all(keys_only = True).filter('bars=','spam').count()
items_count = Example.all().count(10000)
items = Example.all().fetch(10000)
items = Example.all().filter('bars=','spam').filter('bars=','fu').fetch(10000)
items = Example.all().fetch(10000, offset=500)
items = Example.all().filter('foo>=', filtr).filter('foo<', filtr+ u'\ufffd')
Penso che ogni entità restituita sia una lettura, se si dispone di un oggetto di riferimento, la prima volta che si accede è anche una lettura. Si noti che fetch (X) non significa che le entità X vengono restituite se il conteggio è troppo alto, quindi funzionerebbe in massa e ogni volume conterebbe come letture dei dati (dimensione complessiva). Non ho idea di come count (X) funzioni nel rispetto delle letture dei dati, dovrebbe essere considerato come una singola lettura ma è un pio desiderio. –