<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments for Alan deLevie</title>
	<atom:link href="http://www.alandelevie.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alandelevie.com</link>
	<description>The website of Alan deLevie</description>
	<pubDate>Thu, 04 Dec 2008 18:31:58 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>Comment on Penn State&#8217;s Schedule of Courses &#8212; un-&#8221;dapped&#8221; potential by Aleda</title>
		<link>http://www.alandelevie.com/2008/07/18/penn-states-schedule-of-courses-un-dapped-potential/#comment-145</link>
		<dc:creator>Aleda</dc:creator>
		<pubDate>Mon, 27 Oct 2008 16:46:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=77#comment-145</guid>
		<description>Well written article.</description>
		<content:encoded><![CDATA[<p>Well written article.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Recursion-less storage of hierarchical data in a relational database by MValdez</title>
		<link>http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/#comment-30</link>
		<dc:creator>MValdez</dc:creator>
		<pubDate>Wed, 20 Aug 2008 19:43:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=11#comment-30</guid>
		<description>Cool. As I said before, after trying to use the adjacency list method (one of the recursive methods) and failing due to performance issues, and after discovering my "new" simpler method has been patented by somebody, I started to search for new ways to do build my organization-tree manager.

After searching (thanks to the ACM for the ACM Digital Library) I discovered several variants of the Lineage method (or model) also called Path Enumeration or Materialized Path (already mentioned by DQNOK), which indeed are part of a family of models called Tree Encodings.

Anyway, now my software fly: not tens of times, not hundreds of times, but thousands of times faster. From several minutes to few milliseconds with minimal memory usage. (Hey, this is a web application, memory usage is critical.)

I also learned a bit about some variants of the nested set model, but honestly, maybe I am too stupid but got a headache trying to understand them. Ok, maybe I'm not stupid, but I was in a hurry and the Path Enumeration thing is so simple and intuitive.

Regards,

MV</description>
		<content:encoded><![CDATA[<p>Cool. As I said before, after trying to use the adjacency list method (one of the recursive methods) and failing due to performance issues, and after discovering my &#8220;new&#8221; simpler method has been patented by somebody, I started to search for new ways to do build my organization-tree manager.</p>
<p>After searching (thanks to the ACM for the ACM Digital Library) I discovered several variants of the Lineage method (or model) also called Path Enumeration or Materialized Path (already mentioned by DQNOK), which indeed are part of a family of models called Tree Encodings.</p>
<p>Anyway, now my software fly: not tens of times, not hundreds of times, but thousands of times faster. From several minutes to few milliseconds with minimal memory usage. (Hey, this is a web application, memory usage is critical.)</p>
<p>I also learned a bit about some variants of the nested set model, but honestly, maybe I am too stupid but got a headache trying to understand them. Ok, maybe I&#8217;m not stupid, but I was in a hurry and the Path Enumeration thing is so simple and intuitive.</p>
<p>Regards,</p>
<p>MV</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Penn State&#8217;s Schedule of Courses &#8212; un-&#8221;dapped&#8221; potential by Rebecca</title>
		<link>http://www.alandelevie.com/2008/07/18/penn-states-schedule-of-courses-un-dapped-potential/#comment-28</link>
		<dc:creator>Rebecca</dc:creator>
		<pubDate>Tue, 19 Aug 2008 21:21:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=77#comment-28</guid>
		<description>I agree wholeheartedly! This post RULES!</description>
		<content:encoded><![CDATA[<p>I agree wholeheartedly! This post RULES!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Recursion-less storage of hierarchical data in a relational database by PMC</title>
		<link>http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/#comment-11</link>
		<dc:creator>PMC</dc:creator>
		<pubDate>Wed, 30 Jul 2008 01:35:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=11#comment-11</guid>
		<description>I'm in search of the "golden" algorithm to store hierarchical data in a relational database, probably a futile quest, I know. Any one got any ideas?!

p.s. David Chandler’s patent is a joke, let me guess it's an USA patent.</description>
		<content:encoded><![CDATA[<p>I&#8217;m in search of the &#8220;golden&#8221; algorithm to store hierarchical data in a relational database, probably a futile quest, I know. Any one got any ideas?!</p>
<p>p.s. David Chandler’s patent is a joke, let me guess it&#8217;s an USA patent.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Recursion-less storage of hierarchical data in a relational database by MValdez</title>
		<link>http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/#comment-10</link>
		<dc:creator>MValdez</dc:creator>
		<pubDate>Tue, 29 Jul 2008 04:46:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=11#comment-10</guid>
		<description>This is so sad... I have just wrote a piece of code to maintain a very large organizational chart (more than 100,000 users) with a fixed depth (12 levels). After used an adjacency list (the first method) without success (too slow) I decided to use a flat list, with a field for each level... and then I discovered the damn thing has already been patented. Oh, my... 

I agree with DQNOK, using patented algorithms is not that simple if you want to avoid any violation.

I searched to check if the patent was not really just an application (meaning no patent was granted) but it seems the patent was granted. The algorithm is so simple, why did they do this?

Urgh.

Anyway, back to the rewrite my code. I think the mptt will be my answer.

Regards,

MV</description>
		<content:encoded><![CDATA[<p>This is so sad&#8230; I have just wrote a piece of code to maintain a very large organizational chart (more than 100,000 users) with a fixed depth (12 levels). After used an adjacency list (the first method) without success (too slow) I decided to use a flat list, with a field for each level&#8230; and then I discovered the damn thing has already been patented. Oh, my&#8230; </p>
<p>I agree with DQNOK, using patented algorithms is not that simple if you want to avoid any violation.</p>
<p>I searched to check if the patent was not really just an application (meaning no patent was granted) but it seems the patent was granted. The algorithm is so simple, why did they do this?</p>
<p>Urgh.</p>
<p>Anyway, back to the rewrite my code. I think the mptt will be my answer.</p>
<p>Regards,</p>
<p>MV</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Recursion-less storage of hierarchical data in a relational database by Keli Hlodversson</title>
		<link>http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/#comment-9</link>
		<dc:creator>Keli Hlodversson</dc:creator>
		<pubDate>Mon, 28 Jul 2008 08:46:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=11#comment-9</guid>
		<description>The modified preorder tree traversal way of storing the hierarchy (also called nested set model) does not require recursion to update the tree. The rebuild_tree() function shown above converts a parent/child hierarchy table to a modified preorder tree traversal table. 

To update the nested set table directly, one only has to update the left/right indexes appropriately. See this article at mysql.org for more information on how: http://dev.mysql.com/tech-resources/articles/hierarchical-data.html</description>
		<content:encoded><![CDATA[<p>The modified preorder tree traversal way of storing the hierarchy (also called nested set model) does not require recursion to update the tree. The rebuild_tree() function shown above converts a parent/child hierarchy table to a modified preorder tree traversal table. </p>
<p>To update the nested set table directly, one only has to update the left/right indexes appropriately. See this article at mysql.org for more information on how: <a href="http://dev.mysql.com/tech-resources/articles/hierarchical-data.html" onclick="javascript:pageTracker._trackPageview('/outbound/comment/dev.mysql.com');" rel="nofollow">http://dev.mysql.com/tech-resources/articles/hierarchical-data.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Recursion-less storage of hierarchical data in a relational database by DQNOK</title>
		<link>http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/#comment-6</link>
		<dc:creator>DQNOK</dc:creator>
		<pubDate>Mon, 21 Jul 2008 13:44:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=11#comment-6</guid>
		<description>The admin said:
"That still does not negate the usefulness of it. It is one of many options"

How can it be an option when it is patented?

I've not used patented software before (unless perhaps by accident because the patent office was so obtuse at to grant a patent to something that any reasonable programmer like myself just "came up with"), but it occurs to me that attempting to manage the rights to use it would become an absolute nightmare unless you KNEW it was only going to be used in one app, and you yourself entirely controlled the distribution.  Even then, without some automated way of keeping your distribution mechanism synchronized with your patented code use, you still run the risk of being in violation.  A violation COULD spell financial ruin for your employer, and ultimately for yourself.

I appreciate your point about it being a valid technical option in certain limited circumstances.  But for me, the complexity of introducing patented software into my projects far outweighs any performance benefit I might get.  In my app with over a quarter million records, the Lineage method (or "path enumeration method") yielded queries so fast I didn't even bother to time them.  Virtually instantaneous.

Thanks for the article though.  Good explanations and diagrams.  I appreciate the work you put in on it.</description>
		<content:encoded><![CDATA[<p>The admin said:<br />
&#8220;That still does not negate the usefulness of it. It is one of many options&#8221;</p>
<p>How can it be an option when it is patented?</p>
<p>I&#8217;ve not used patented software before (unless perhaps by accident because the patent office was so obtuse at to grant a patent to something that any reasonable programmer like myself just &#8220;came up with&#8221;), but it occurs to me that attempting to manage the rights to use it would become an absolute nightmare unless you KNEW it was only going to be used in one app, and you yourself entirely controlled the distribution.  Even then, without some automated way of keeping your distribution mechanism synchronized with your patented code use, you still run the risk of being in violation.  A violation COULD spell financial ruin for your employer, and ultimately for yourself.</p>
<p>I appreciate your point about it being a valid technical option in certain limited circumstances.  But for me, the complexity of introducing patented software into my projects far outweighs any performance benefit I might get.  In my app with over a quarter million records, the Lineage method (or &#8220;path enumeration method&#8221;) yielded queries so fast I didn&#8217;t even bother to time them.  Virtually instantaneous.</p>
<p>Thanks for the article though.  Good explanations and diagrams.  I appreciate the work you put in on it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Recursion-less storage of hierarchical data in a relational database by admin</title>
		<link>http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/#comment-5</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Fri, 18 Jul 2008 17:21:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=11#comment-5</guid>
		<description>Once again, I agree that the need to know the depth is the main disadvantage of this method. However, while there are many cases in which the depth is unknown/impossible to predict, there are just as many cases where the depth will be constant. Take for example the storage of a course catalog at a college. I would have one column for semester, one for campus, one for department, one for course name, and one for sections. I have tried both the mptta and Chandler's method for storing course data. The mptta becomes VERY slow.

The two comments I've received for this post are essentially examples in which Chandler's method will not work. That still does not negate the usefulness of it. It is one of many options, including the mptta and the path enumeration model.</description>
		<content:encoded><![CDATA[<p>Once again, I agree that the need to know the depth is the main disadvantage of this method. However, while there are many cases in which the depth is unknown/impossible to predict, there are just as many cases where the depth will be constant. Take for example the storage of a course catalog at a college. I would have one column for semester, one for campus, one for department, one for course name, and one for sections. I have tried both the mptta and Chandler&#8217;s method for storing course data. The mptta becomes VERY slow.</p>
<p>The two comments I&#8217;ve received for this post are essentially examples in which Chandler&#8217;s method will not work. That still does not negate the usefulness of it. It is one of many options, including the mptta and the path enumeration model.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Recursion-less storage of hierarchical data in a relational database by DQNOK</title>
		<link>http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/#comment-4</link>
		<dc:creator>DQNOK</dc:creator>
		<pubDate>Fri, 18 Jul 2008 16:25:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=11#comment-4</guid>
		<description>I can't believe he was granted a patent for this!  It's basic art; like building a picket fence.  Good grief.

This method is effectively the "Lineage" method mentioned elsewhere, but is more limited as the max depth must be known ahead of time.  In the Lineage approach, an extremely large VARCHAR can be used which will allow MANY layers, but will only use the amount of storage actually required.  This patented approach ALWAYS stores the maximum depth, even when it's not needed.  I considered this method for a BOM (Bill Of Materials) program (before I knew the stupid approach was patented!), but ultimately decided it was way too wasteful, and went with the Lineage approach instead.  Presently I'm considering rewriting the app to use the Nested Set (or MPTTA) approach.</description>
		<content:encoded><![CDATA[<p>I can&#8217;t believe he was granted a patent for this!  It&#8217;s basic art; like building a picket fence.  Good grief.</p>
<p>This method is effectively the &#8220;Lineage&#8221; method mentioned elsewhere, but is more limited as the max depth must be known ahead of time.  In the Lineage approach, an extremely large VARCHAR can be used which will allow MANY layers, but will only use the amount of storage actually required.  This patented approach ALWAYS stores the maximum depth, even when it&#8217;s not needed.  I considered this method for a BOM (Bill Of Materials) program (before I knew the stupid approach was patented!), but ultimately decided it was way too wasteful, and went with the Lineage approach instead.  Presently I&#8217;m considering rewriting the app to use the Nested Set (or MPTTA) approach.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Recursion-less storage of hierarchical data in a relational database by admin</title>
		<link>http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/#comment-3</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Thu, 17 Jul 2008 20:51:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.alandelevie.com/?p=11#comment-3</guid>
		<description>I agree. For a forum, I would probably end up using Chandler's method to store topics down to the level of an individual thread. Within each thread, discussions would be stored using the flat table model mentioned in the evolt article.</description>
		<content:encoded><![CDATA[<p>I agree. For a forum, I would probably end up using Chandler&#8217;s method to store topics down to the level of an individual thread. Within each thread, discussions would be stored using the flat table model mentioned in the evolt article.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
