It's been a few days since the last message on this thread - just making sure it doesn't fall through the cracks :)
On Jul 8, 9:06 pm, Pol <i...@pol-online.net> wrote: > Thanks for the slides, quite interesting - too bad there was no audio, > it would have helped even more. > > So still, how are zig-zag joins relevant here? I use the Python SDK > and composite indexes are added automatically to index.yaml anyway, so > there should be no zig-zagging or am I missing something? > > Anyway, I hope I'm up-to-speed on the terminology now, so I'm looking > forward to hear your answers about my previously raised questions :) > > On Jul 8, 12:21 pm, "Ikai Lan (Google)" <ika...@google.com> wrote: > > > > > > > > > Before I try to answer this question, can you take a look at these slides? > > Hopefully these should clarify why things work the way they work: > > >http://www.slideshare.net/ikailan/introducing-the-app-engine-datastore > > > Ideally, these will raise new questions about how entity groups, index > > scans, etc work. > > > 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, Jul 7, 2011 at 7:37 PM, Pol <i...@pol-online.net> wrote: > > > I'm a little confused by your answer and the concept of "zigzag > > > joins". In practice, assuming the result set will end up being the > > > same, is any of these 2 queries faster / better and why exactly? > > > > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND > > > prime = TRUE ORDER BY timestamp DESC", self.user.key()) > > > > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND > > > initialized = TRUE AND prime = TRUE ORDER BY timestamp DESC", > > > self.user.key()) > > > > Regarding the 2nd set of queries I asked about, all things being > > > equal, is it better to do the query with or without the ANCESTOR? > > > Intuitively, I would expect the ANCESTOR version to perform faster as > > > it would only run on 1 machine / entity group, but is this true? > > > > In the data model, Photo is a child of User and there 1000's more > > > photos than users. Otherwise, I haven't measured performance in the > > > app yet, I'd rather rely on some "official" best practices for now :) > > > > On Jul 7, 6:25 pm, "Ikai Lan (Google)" <ika...@google.com> wrote: > > > > Ancestor queries don't add significant overhead, so I'm not going to > > > > consider that factor. > > > > > As far as other queries go, in general fewer indexed mean better > > > performance > > > > if you are doing zigzag join. However - if an index contains a small > > > number > > > > of results, obviously the query will return faster because there are > > > simply > > > > less results. Otherwise, you end up zig zagging across more indexes, > > > which > > > > probably will result in slower queries. It really depends on the shape > > > > of > > > > your data. What have your obvservations been? > > > > > 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, Jul 7, 2011 at 6:21 PM, Pol <i...@pol-online.net> wrote: > > > > > Hi, > > > > > > Assuming the app runs on an HR database and that the number of indexes > > > > > is not a problem: > > > > > > Say that because of the data model, these queries are equivalent (i.e. > > > > > return the exact same results), which one should be used to get the > > > > > best performance? > > > > > > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND > > > > > prime = TRUE ORDER BY timestamp DESC", self.user.key()) > > > > > > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND > > > > > initialized = TRUE AND prime = TRUE ORDER BY timestamp DESC", > > > > > self.user.key()) > > > > > > Does the response change if somewhere else in the code, there is also > > > > > this query (because of shared indexes or something)? > > > > > > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND > > > > > initialized = TRUE ORDER BY timestamp DESC", self.user.key()) > > > > > > Same question, this time with these 2 other queries: > > > > > > query = db.GqlQuery("SELECT * FROM Photo WHERE event = :1 AND prime = > > > > > TRUE AND hidden = FALSE ORDER BY timestamp DESC", event.key()) > > > > > > query = db.GqlQuery("SELECT * FROM Photo WHERE ANCESTOR IS :1 AND > > > > > event = :2 AND prime = TRUE AND hidden = FALSE ORDER BY timestamp > > > > > DESC", event.key().parent(), event.key()) > > > > > > I understand the 2nd version is an ancestor query which should return > > > > > consistent results (right?) but in this case, it's ok if the results > > > > > are a bit stalled. > > > > > > Thanks! > > > > > > -- > > > > > 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.