in reply to OT: Scalable web application architecture

...my class structure made the search functionality runs really slow.

Seems like this happens a lot. One common speed/maintainability scenario is when programmers use an ORM (Object Relationship Mapper) to make dbi code more maintainable, either by building their own (frowned on) or using Class::DBI or DBIx::Class or friends (less frowned on, but still a performance penalty). Did something like this happpen in your case? If so, see OO concepts and relational databases ... Thoughts about Class::DBI and MySQL performance... and super searching will probably turn up more.

What other factors do you reckon could be causing your "more maintainable" classes to suffer? Do you use complicated inheritance? Perhaps then you could recode to use composition instead, which legend has it is often a win. (I've found this to be so from personal experience.)

In any case, perhaps you could just expand a bit on what I quoted. You already talk about this quite a bit in your post, and if you are convinced that this is really the full story, fair enough. But perhaps something else occurs to you.

  • Comment on Re: OT: Scalable web application architecture

Replies are listed 'Best First'.
Re^2: OT: Scalable web application architecture
by badaiaqrandista (Pilgrim) on Dec 07, 2005 at 12:27 UTC

    I do make my own DBI wrapper, which looks like DBIx::Class, simply because I don't like Class::DBI and I didn't know about DBIx::Class.

    What other factors do you reckon could be causing your "more maintainable" classes to suffer? Do you use complicated inheritance? Perhaps then you could recode to use composition instead, which legend has it is often a win. (I've found this to be so from personal experience.)

    I don't use complicated inheritance. I think, it is not the class structure that makes it suffer, but the way I structure them that makes it suffer. What I mean is I want each class to represent one business entity, which usually is represented in one or two related tables. When a class wants to access a table outside its responsibility, it should not use that table in a query, but should call a method of the class for that table. Sometime I break this rule to gain performance, but I don't do it liberally because it degrades the class maintainability. Is my approach right? Am I just too paranoid about getting the code too messy?

    I hope it answers your question. Thanks for your reply

    badaiaqrandista