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.

Reply via email to