[geeklog-devel] Comment Speed Improvement

Dwight Trumbower dwight at trumbower.com
Sun Mar 28 01:02:35 EST 2004


English version of the same method can be found here. 
http://www.intelligententerprise.com/001020/celko.jhtml?_requestid=13769

It is by Joe Celko, one of the gurus in SQL programming. He has been 
promoting this method for years. I have used this method before and it 
works nice.

At 01:54 PM 3/27/2004, you wrote:

>I've been thinking hard about improving the speed of displaying comments 
>by reducing the number of queries and potentially removing the need to use 
>recursive functions.
>
>While Niels solution provides a quick fix for groklaw's specific problems, 
>it is pretty inefficient when you are looking at a subset of comments for 
>a story.  A more elegant solution must be possilbe..
>
>I think I've found that solution, but it will take some work (including a 
>database change) to implement.  While I'm fully capable of implementing 
>it, I wanted to get some feed-back before jumping in.
>
>The idea is to store the comments in the database using a modified 
>preorder tree traversal method.  A brief description (along with a 
>comparison to our current method) can be found in this article:
>
>         http://www.sitepoint.com/article/hierarchical-data-database
>
>A better description is this site:
>
>         http://membres.lycos.fr/sqlpro/Tree/SQL_tree.htm
>
>However it is in French (which I don't speak).  But babelfish 
>(http://babel.altavista.com) works pretty well on the first half of the 
>page.  Plus it has many useful graphics.
>
>The idea is a little confusing at first, but once you wrap your head 
>around it you'll think:  "Wow, hey, that's pretty darn cool".  Or maybe 
>you'll think: "Mein Gott, das ist wirklich kühl.". ;)
>
>The summary:
>
>- 1 query and 2 updates to insert a new comment
>- 1 query to get all the comments (in a logical order for display)
>- 1 query to get all the children of a given comment (with or without the 
>given comment)
>- 1 query to count the number of children a comment has
>
>Basically this will drastically improve the speed of comment displays of 
>all types, especially for sites that have very large databases of comments 
>(groklaw).  The only expense is adding two extra db queries when a comment 
>gets added (including one that could potentially update almost every 
>database row).
>
>The only change to the database will be the addition of two integer 
>columns: left terminal (lft) and right terminal (rgt).  Optionally we 
>could also remove the parent id (pid) column as it would no longer be 
>technically necessary.  That being said, I think we should preserve it for 
>convenience.
>
>I think the improvement will be worth it, though we'll have to write a 
>slick upgrade script to take care of current comments.  A side effect of 
>using this method is that we will be able to write a comment function that 
>is iterative rather than recursive which will further improve performance.
>
>Another note is that this method is database independent.  There are some 
>other pretty nice solutions that require stored procedures and I think 
>Oracle has something built in.  Obviously those other solutions are really 
>going to work well with MySQL.
>
>If the article above doesn't make sense, let me know and I can write a 
>brief summary of what is going on in "preorder tree traversal" method.
>
>Please everyone, let me know what you think.  I'd especially like some 
>input from a DB guy to make sure I'm not missing something obvious 
>(Dwight, you still out there?).
>
>-Vinny
>_______________________________________________
>geeklog-devel mailing list
>geeklog-devel at lists.geeklog.net
>http://lists.geeklog.net/listinfo/geeklog-devel
>
>
>


More information about the geeklog-devel mailing list