Hello Michael, JFYI - schema mapping approach worked fine, however I faced a new requirement to clear mappings in case if schema was altered (since I can not restart the web server),
so I will try to clear partial mappers as you've suggested, Alex On 29 сент, 18:35, Alex K <[EMAIL PROTECTED]> wrote: > Thanks for such a detailed response! > > I'll try schema caching approach and will bring back the results, > > Thanks again, > Alex > > On 29 сент, 18:21, Michael Bayer <[EMAIL PROTECTED]> wrote: > > > On Sep 29, 2008, at 9:30 AM, Alex K wrote: > > > > Hi All, > > > > My application uses XML schema to load tables, classes, set SQLA > > > mapping and relations. > > > > Each processing node (thread or process, depends on config) does not > > > know beforehand what type of mapping it will process, that's why I > > > need to create mapping (parse schema, and generate classes) per each > > > request. > > > > This approach worked fine for me, however I have issues when there is > > > high load on the same processing node - SQLA throws an exception > > > saying that my dynamic class is not mapped. ("Class app.User is not > > > mapped") > > > > I understand that it may be some app/configuration issue (and I'm > > > almost sure it is). > > > > Docs say that mapping should be created only at the app level, I > > > thought that violating this rule can cause errors of this kind. > > > OK, what we mean more specifically there is that the mapper is created > > in the same scope as the class. If you are creating classes local to > > a function, you can create the mapper there as well. > > > That you have issues during "high load" is suspect, however. > > > > I thought that clear_mappers can help here, but I fear it will clear > > > all mappers in the process, since _mapper_registry is a module level > > > global hash. > > > this is correct. I wouldn't use clear_mappers here. If your > > classes fall out of scope and are garbage collected, the corresponding > > mappings should also fall out of scope, *provided no remaining mappers > > reference them*. This behavior is also tested more fully in 0.5 and > > I can't guarantee the "automatic garbage collection" as strongly in 0.4. > > > The overall idea of removing partial sets of mapped classes from a > > larger group is not something we've tested or tried to support. It > > wont work, for example, if you leave a mapper in place which is parent > > mapper of one of the removed mappers, or if the remaining mapper has > > relations to the removed mapper. The results are not defined in > > those cases. > > > Another nasty side effect is that the "compile" phase of mappers is > > globally mutexed. If you're creating mappings per request, the > > compilation stage is mutexted against all other requests. This is > > all a product of the fact that mappings deal with a global registry. > > Additionally, since mapper compilation is only meant to occur once per > > application, its not at all optimized for per-request performance and > > will make for a slightly more sluggish application if called constantly. > > > It wouldn't be very difficult for the ORM to work using a Pylons-like > > "stacked object proxy" approach where the mapper registry and its > > mutex are swapped in and out on a per-request basis but its not clear > > right now that this is something that should be built in. > > > The most unclear aspect of this, to me, is why you need to "drop" > > anything at all. It seems that the incoming XML schema defines a set > > of tables to be worked with. Certainly, the number of tables which > > an instance of your application uses is fixed. It seems like it > > would be very easy to just check the XML schema's identifier and look > > up in a dictionary that this set of mappings has already been > > defined. You'd have none of the issues related to clearing partial > > mappings and you wouldn't have the enormous overhead of parsing > > schemas and recompiling a set of mappers on every request. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---