NYCPHP Meetup

NYPHP.org

[nycphp-talk] Building trees

Adam Fields fields at surgam.net
Wed Oct 16 18:05:59 EDT 2002


On Wed, Oct 16, 2002 at 05:40:53PM -0400, Jim Hendricks wrote:
> The other reason for avoiding this is my Host Provider would croak if I 
> build too much in memory thus hogging the memory shared across many 
> sites.  I avoid as much memory use as I can so when I really need it 
> it's available.

Seems reasonable. I don't know how much memory overhead the class
implementation adds. I wouldn't think too much. Anyone?

Even session variables aren't stored in memory though - they're
written out to temp space on disk (at least, that's how I read the
docs).

> Adam Fields wrote:
> 
> >On Wed, Oct 16, 2002 at 04:22:11PM -0400, Jim Hendricks wrote:
> >  
> >
> >>Adam Fields wrote:
> >>
> >>    
> >>
> >>>I'd wrap a class around the whole thing. Use that class to broker
> >>>reads and writes to the tree table. Add a "changed" timestamp to the
> >>>tree, and have a read from the class only reload the tree from the
> >>>database if it's changed since the last read. Stash the object in the
> >>>session for reuse, or serialize it to another table (or file, or
> >>>whatever) for quick retrieval.
> >>> 
> >>>
> >>>      
> >>>
> >>I don't know about the class thing since it adds a level of complexity 
> >>to the code that I don't know
> >>if it's waranted.  
> >>    
> >>
> >
> >I would argue that this will actually make the majority of your code
> >simpler, because you're encapsulating the complexity. :)
> >
> >I'm the first to admit that classes aren't appropriate for everything,
> >but they're the right approach for this kind of stuff.
> >
> >I'd do something like this:
> >
> >class tree {
> >      var nodemap;
> >      # and whatever else you want
> >
> >      function tree () {
> >      # maybe some init code
> >      }
> >
> >      function get_tree () {
> >      # check if tree has changed or isn't populated yet
> >      # if yes to either, get tree from db
> >      # otherwise, maybe get tree from intermediate storage if you're
> >      doing that
> >
> >      }
> >
> >      function save_tree () {
> >      # write tree to db
> >      }
> >
> >      function store_tree () {
> >      # write tree to intermediate storage
> >      }
> >
> >      function render_tree () {
> >      # if tree isn't populated, get tree
> >      # output tree html or tree values or whatever
> >      }
> >      
> >      function get_tree_values () {
> >      # return raw node data for the tree
> >      }
> >}
> >
> >Then, in your page:
> >
> >$mytree = new tree();
> >$mytree->render_tree();
> >or
> >$mytree->get_tree_values();
> >
> >  
> >
> >>I do like the idea of caching the tree though.  I 
> >>would cache it in the DB so that the
> >>tree does not need to be generated at all when the request to display it 
> >>occurs.  The tree would
> >>be regenerated everytime a change occurs to the underlying data ( which 
> >>is a low volume data set )
> >>This may not be a good idea for items that have a higher change velocity.
> >>    
> >>
> >
> >While I wouldn't advocate this approach for something that changes
> >once a minute or so, if it changes less than once an hour, this will
> >probably still result in a performance gain, and it will be easier to
> >maintain.
> >
> >  
> >
> 
> 
> 
> 
> --- Unsubscribe at http://nyphp.org/list ---
> 
> 
> 

-- 
				- Adam

-----
Adam Fields, Managing Partner, fields at surgam.net
Surgam, Inc. is a technology consulting firm with strong background in
delivering scalable and robust enterprise web and IT applications.
http://www.adamfields.com



More information about the talk mailing list