If that's the performance, then I'm inclined to say the entities are large
and that's about the performance you can expect. One more thing to keep in
mind: the cost of deserializing each entity is non-trivial.

Is there a reason you need all 2000 entities? Perhaps there is a different
way to accomplish what you want without querying a (relatively) large number
of entities at once.

One other possible solution that will at least make your user facing code
run faster is to split the query up by key, perform multiple async queries
and join them at the end. It'll still consume the same (or more) CPU time,
but the user ms should be lower since you are doing things in parallel. The
tradeoff here, of course, is that you'd need to know how you can split up
the keyspace.

Ikai Lan
Developer Programs Engineer, Google App Engine
Blog: http://googleappengine.blogspot.com
Twitter: http://twitter.com/app_engine
Reddit: http://www.reddit.com/r/appengine



On Mon, Mar 21, 2011 at 12:17 AM, adhi <adhinaraya...@gmail.com> wrote:

> q = db.Query(PrimaryData)
> q.filter('SheetMetadataId', metadata.getSheetId())
> return q.fetch(2000)
>
> Hi Ikai, even the above query takes 3.3 ~ 3.6 seconds. The number of
> entities returned by the query is 1261.
> I'm using Expando model, the total number columns for this particular
> set of entities are 25.
> Yes. I've created composite index. Here is the index definition.
>
> - kind: PrimaryData
>  properties:
>  - name: SheetMetadataId
>  - name: InstanceAssignedTo
>
> please let me know if you need more information.
>
>
> On Mar 17, 11:50 pm, "Ikai Lan (Google)" <ika...@google.com> wrote:
> > If you have a composite index, the performance of this query should be
> > mostly linear (find start location of index and just return min(2000,
> number
> > of entities that satisfy query from there on out) number of keys and
> items.
> > If you only have individual indexes for SheetMetadataId as well as
> > InstanceAssignedTo, this uses zigzag merge join, where performance can
> > greatly vary depending on the shape of the data.
> >
> > Just out of curiosity, what is the performance of this query?
> >
> > q = db.Query(PrimaryData)
> > q.filter('SheetMetadataId', metadata.getSheetId())
> > return q.fetch(2000)
> >
> > If it's in a similar ballpark, my other guess is that the query takes
> that
> > amount of time because the entities are large.
> >
> > You mentioned created a composite index. Can you post that?
> >
> > I'll talk to the datastore team to see what we can do to provide
> something
> > similar to EXPLAIN plans for queries.
> >
> > Ikai Lan
> > Developer Programs Engineer, Google App Engine
> > Blog:http://googleappengine.blogspot.com
> > Twitter:http://twitter.com/app_engine
> > Reddit:http://www.reddit.com/r/appengine
> >
> >
> >
> >
> >
> >
> >
> > On Thu, Mar 17, 2011 at 10:07 AM, adhi <adhinaraya...@gmail.com> wrote:
> > > Hi Robert,
> > > I've not used reference properties. Its a simple query and it'll be
> > > like this.
> >
> > > q = db.Query(PrimaryData)
> > > q.filter('SheetMetadataId', metadata.getSheetId())
> > > q.filter('InstanceAssignedTo IN',
> > > [u'User_c42e8919_448e_11e0_b87b_f58d20c6e2c3',
> > > u'User_1fd87ac5_073d_11e0_8ba1_c122a5867c4a'])
> > > return q.fetch(2000)
> >
> > > and I replaced the IN filter to '=' with single value. Still its
> > > taking same time.
> >
> > > On Mar 17, 6:27 am, Robert Kluin <robert.kl...@gmail.com> wrote:
> > > > Use Appstats. It may not be the query that is slow.  If you are using
> > > > reference properties, perhaps you are dereferencing them.  If you
> > > > should us the query and how you're using the results we might be abel
> > > > to give more suggestions.
> >
> > > >http://code.google.com/appengine/docs/python/tools/appstats.html
> >
> > > > Robert
> >
> > > > On Mon, Mar 14, 2011 at 10:54, adhi <adhinaraya...@gmail.com> wrote:
> > > > > Hi, I'm running a query in appengine which is returning just 1200
> > > > > entities, but its taking 3.5 seconds. The query doesn't contains
> > > > > inequality filters, but anyway I added index for that. Can anyone
> tell
> > > > > me how to analyse this and improve theperformance?
> >
> > > > > --
> > > > > You received this message because you are subscribed to the Google
> > > Groups "Google App Engine" group.
> > > > > To post to this group, send email to
> google-appengine@googlegroups.com
> > > .
> > > > > To unsubscribe from this group, send email to
> > > google-appengine+unsubscr...@googlegroups.com.
> > > > > For more options, visit this group athttp://
> > > groups.google.com/group/google-appengine?hl=en.
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Google App Engine" group.
> > > To post to this group, send email to google-appengine@googlegroups.com
> .
> > > To unsubscribe from this group, send email to
> > > google-appengine+unsubscr...@googlegroups.com.
> > > For more options, visit this group at
> > >http://groups.google.com/group/google-appengine?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To post to this group, send email to google-appengine@googlegroups.com.
> To unsubscribe from this group, send email to
> google-appengine+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/google-appengine?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to