hey good news, it was mostly something obvious.  I now have the the
overall time running within 10% of the 0.2.8 test, and the "inner" time
is within 20%.  It was another one of those debugger lines which I now
made conditional.

the other cause for the speed difference is related to the newer
functioning of the attributes package vs. 0.2.  the 0.3 series is
better able to accurately detect what objects have been changed by
using a "CommittedState" object that stores a snapshot of each instance
as it is loaded from the database.  this is in contrast to what
previous versions did whereby whenever a "set" or "append" operation
took place, the attribute instrumentation would store the "old" version
of the attribute at the point of the attribute changing (and the
management of list-based values was very complicated and brittle).  so
the older version moves the overhead from object instantiation to
object manipulation..which you can argue is better from a speed
perspective since only a subset of loaded objects will actually be
manipulated, if any.  Although, 0.3 is more efficient speedwise for the
creation and manipulation of objects that were not loaded from the
DB...so there is some tradeoff stuff happening here.

because of its construction, 0.2.8 had no way of detecting changes in
values that did not correspond to a "set" operation, such as mutable
values that are saved via pickling.  it was also more complicated code
and was not as flexible - in 0.3, the method of copying/comparing
attributes is determined by the corresponding TypeEngine instance
instead of being hardcoded (and is therefore customizable).  the
current architecture was modeled after the way hibernate does it.  we
also are in place to cleanly allow any collection type to be used for
collections which was not very flexible in 0.2.  so this an example of
code that is clearer, more straightforward, and more functional, but is
slightly slower in some cases (and a little faster in others).

anyway, current speed test in rev 2127:

0.3/rev 2127:

2006-12-04 15:25:37.203150: Loading sis
2006-12-04 15:25:38.619858: 377 sis loaded
2006-12-04 15:25:38.620749: Creating indicators
2006-12-04 15:25:38.785517: 127 indicators created
2006-12-04 15:25:38.786975: registering...
2006-12-04 15:25:38.877868: ok done !
total time 1.67651295662

real    0m2.658s
user    0m1.707s
sys     0m0.391s

0.2.8:

006-12-04 15:25:57.421278: Loading sis
2006-12-04 15:25:58.583894: 377 sis loaded
2006-12-04 15:25:58.584764: Creating indicators
2006-12-04 15:25:58.803848: 127 indicators created
2006-12-04 15:25:58.805388: registering...
2006-12-04 15:25:58.824950: ok done !
total time 1.40534806252

real    0m2.255s
user    0m1.457s
sys     0m0.379s

you can bet the 0.1 series was twice as fast as 0.2, too, since there
was an even greater level of hardwired behavior.


--~--~---------~--~----~------------~-------~--~----~
 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