邻接列表模型或嵌套集模型,我应该使用哪种数据模型来存储我的分层数据?

时间:2010-11-19 08:53:24

标签: mysql html twitter adjacency-list nested-lists

我必须将我的网络应用程序从Twitter获取的消息存储到本地数据库中。存储消息的目的是我需要以分层次序显示这些消息,即用户通过我的应用程序输入的某些消息(即状态更新)是其他人的子节点(我必须将它们显示为父消息的子列表项) )。我应该使用哪种数据模型邻接列表模型或嵌套集模型?我必须管理四种类型的消息&每个类别中的消息可以有两个子节点。这里还有一个问题是,我在两种情况下都看到(实现)输入是手动控制的,这是在邻接模型中对父节点的引用,或者在嵌套列表中给出了右边,左边。我的应用程序从Twitter获取消息数据,如:

foreach ($xml4->entry as $status4) {
       echo'<li>'.$status4->content.'</li>';
       } 

所以它没有手册,任何时候都可以获得任意数量的消息。如何在来自它的消息中建立父子关系。目前,用户在与四种类型的消息相对应的不同窗口中输入消息,我的应用添加了关键字&amp;取回那些在差异窗口中显示的内容。所有这些消息都是父消息。现在我如何让用户输入可以作为另一个人的孩子保存到数据库中的消息。

2 个答案:

答案 0 :(得分:2)

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

如果您要拥有更多或更少深度的数据树(从每个根节点开始),请考虑使用嵌套集,因为AL会很慢。

答案 1 :(得分:1)

当你说

  

树的深度是2个节点。即每个   parent msg可以有两个子节点。

我感到困惑。

如果两个子节点中的每一个都可以有更多的子节点,那么你不会占用深度,而是节点的一个分支的宽度。

1)深度确实= 2

如果你的最大深度真的是2(换句话说,所有节点都连接到root,或者是2级步骤中的零级节点;换句话说,对于每个节点,没有其他祖先,那么父级和祖父级)然后你可以甚至直接使用关系模型来存储分层数据(通过自联接,这对于如此低的最大深度不是那么糟糕,或者通过将数据分成3个实体 - 祖父母,父母和孩子)

2)深度&gt;&gt; 2

如果数字2是宽度且深度是可变的并且可能非常深,那么请查看嵌套集,还有两种可能的探索方法

  • 使用嵌套集的想法,你可以探索geom类型来存储分层数据,(好处可能不那么有趣 - 几个有用的运算符,单个字段,可能更好的索引策略)
  • continued fractions(基于嵌套集,tropashko提供的泛化似乎很有意思,因为他们承诺改进嵌套集的一些问题;虽然没有实现它......做你自己的测试)。