Hi Michael,

Thanks for the quick reply.

What I am in fact doing is undefer all fields, eagerload all relations
(and undefer the corresponding fields) for a corresponding model.
(ended up being 9xx options altogether)

And yes, I am on 0.3.11 (and probably is unable to move onto a 0.4  as
I am relying on an old and custom version of elixir and some custom
sqlalchemy fixes),

I guess the question is whether it is possible (easy) to rip the
benefit of those improvements by merging the 0.4 code into my current
0.3.11?

Lei

I guess the question now is,
On Dec 18, 4:25 pm, Michael Bayer <[EMAIL PROTECTED]> wrote:
> On Dec 17, 2007, at 10:38 PM, Esceo wrote:
>
>
>
> > Hi,
>
> > I am just wondering about the traversal order of ClauseVistor, does it
> > have to be in a set order?
>
> > I am eagerloading lots (1000s) of relations, and query compilation
> > take a long time, a profiling revealed that most of the time was spent
> > in traverse.
>
> it sounds like you are on an old version of SQLAlchemy as the compiler  
> does not use any method called "traverse" anymore.  If you are on any  
> 0.4 version, our statement compilation is quite fast; as of 0.4.1  
> INSERTs and UPDATEs take around 40-50 function calls and a SELECT  
> about 120-150 (the callcount goes up with complexity obviously).  Also  
> if you can clarify what "eagerloading 1000s of relations" means, since  
> i doubt you are issuing a JOIN of 1000 tables, that would be helpful.  
> If youre on an 0.3 version and switch to 0.4.1 youll see a significant  
> decrease in processing time for just about everything, and 0.4.2 is  
> going to improve an average of about 20% over 0.4.1 (available in  
> trunk if you feel like trying it).
>
> > So, I am just wondering if the performance will bump up
> > if we do not have to use intermediate lists (or use one less list) to
> > maintain the traversal order.
>
> Again assuming 0.4, there's no lists of traversal order used in  
> statement compilation, it calls each function as needed in order to  
> render each component of the select, using regular recursive  
> generation, and the order of function calls is exactly the order of  
> each component in the final string output.  We profile all the time,  
> in fact on a daily basis, and we are quite fast;  if you've seen those  
> infamous Robert Brewer tests, we actually beat out at least one of the  
> competitors when the tests are made fair by removing the hundreds of  
> transaction commits that only the SQLAlchemy test, but not the others,  
> is made to do.  I'm debating doing some more blog posts about that.
>
> If youre talking about the visitiors.py traversal, thats not used  
> right now in statement compilation, and the 0.4 version is also an  
> inlined, non-recursive version which is generally faster than a  
> recursive algorithm since it incurs very little method call overhead,  
> which tends to be one of the most expensive things in Python.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to