update google create array google-app-engine profiling rpc google-cloud-datastore billing

google app engine - google - ¿Cuántas lecturas de Datastore consumen cada una de las operaciones Fetch, Count y Query?



google datastore array (2)

Consulta http://code.google.com/appengine/docs/billing.html#Billable_Resource_Unit_Cost . Una consulta le cuesta 1 lectura más 1 lectura por cada entidad devuelta. "Devuelto" incluye entidades omitidas por desplazamiento o recuento. Entonces eso es 1001 lecturas para cada uno de estos:

Example.all(keys_only = True).filter(''bars='',''spam'').count() Example.all().count(1000) Example.all().fetch(1000) Example.all().fetch(1000, offset=500)

Para estos, el número de lecturas cargadas es 1 más el número de entidades que coinciden con los filtros:

Example.all().filter(''bars='',''spam'').filter(''bars='',''fu'').fetch() Example.all().filter(''foo>='', filtr).filter(''foo<'', filtr+ u''/ufffd'').fetch()

En lugar de utilizar el recuento, debería considerar almacenar el conteo en el almacén de datos, fragmentado si necesita actualizar el conteo más de una vez por segundo. http://code.google.com/appengine/articles/sharding_counters.html

Siempre que sea posible, debe usar cursores en lugar de un desplazamiento.

Estoy leyendo en Google App Engine grupos de muchos usuarios ( Fig1 , Fig1 , Fig3 ) que no pueden averiguar de dónde proviene el gran número de lecturas del Datastore en sus informes de facturación.
Como ya sabrá, las lecturas del Datastore están limitadas a 50.000 operaciones / día, por encima de este presupuesto debe pagar.

Las operaciones de 50K suenan como una gran cantidad de recursos, pero desafortunadamente, parece que cada operación (consulta, búsqueda de entidad, conteo ...) esconde varias lecturas de Datastore.

¿Es posible saber a través de API o algún otro enfoque, cuántas lecturas de Datastore están ocultas detrás de las llamadas RPC.get , RPC.runquery comunes?

Appstats parece inútil en este caso porque da solo los detalles de RPC y no el costo de las lecturas ocultas.

Tener un modelo simple como este:

class Example(db.Model): foo = db.StringProperty() bars= db.ListProperty(str)

y 1000 entidades en el almacén de datos, estoy interesado en el costo de este tipo de operaciones:

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'')


Solo por asegurar:

Estoy casi seguro:

Example.all().count(10000)

Éste usa operaciones pequeñas del almacén de datos (no es necesario buscar las entidades, solo las claves), por lo que esto contaría como 1 operación de lectura + 10,000 (máximo) operaciones pequeñas.