Hi Ryan, A query cost 1 read + 1 read per entity retrieved or 1 small read per key if that's a key only query as described in the documentation: https://developers.google.com/appengine/docs/billing#Billable_Resource_Unit_Costs
So fetching 2 items using a regular query should cost: 1 DATASTORE_READ (query) + 2 DATASTORE_READ (entity read) Fetching 2 items using a key only query then a get_multi should cost: 1 DATASTORE_READ (query) + 2 DATASTORE_SMALL (key read) + 2 DATASTORE_READ (entity read) Fetching 2 items using a key only query then getting them from the cache should cost: 1 DATASTORE_READ (query) + 2 DATASTORE_SMALL (key read) I would recommend to experiment with the new AppStats shell (/_ah/stats/shell on your appstats enabled app) to figure out query cost, for example this query: q = User.query(User.data == 'foo') results in the following appstats trace if there is only 3 entities with data == 'foo': @164ms datastore_v3.RunQuery real=10ms api=0ms cost=280 billed_ops=[DATASTORE_READ:4] Here is slidedeck explaining some optimization pattern for datastore operations using interactive appstats examples (click the Run button on each slide). http://proppy-appstats.appspot.com/#2 Hope that helps, and let me know if you experience anything different. On Fri, Jan 4, 2013 at 1:12 PM, Ryan Chazen <[email protected]> wrote: > Hi, > > Could anybody help me out with understand keys-only query costs? > > I've done the following tests: > > Fetch 2 items using a regular query (fully entity fetched) > - (3 RPCs, cost=350, billed_ops=[DATASTORE_READ:5]) > Fetch 2 items using a keys-only query, and then fetch the full item (cache > miss) > - (9 RPCs, cost=370, billed_ops=[DATASTORE_READ:5, DATASTORE_SMALL:2]) > Fetch 2 items using a keys-only query, and fetch the full entity from > memcache (cache hit) > - (5 RPCs, cost=230, billed_ops=[DATASTORE_READ:3, DATASTORE_SMALL:2]) > > So even with full cache hit, a keys-only query still uses 3 full datastore > reads? > I'm assuming keys-only queries should only be used when the hit chance is > high? eg only use keys-only queries on data that is expected to have been > accessed recently. > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/google-appengine/-/O7xPE09_GIwJ. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/google-appengine?hl=en. > -- Johan Euphrosine (proppy) Developer Programs Engineer Google Developer Relations -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
