【问题标题】:What database can store trees?什么数据库可以存储树木?
【发布时间】:2012-01-22 19:34:20
【问题描述】:

是否有一个可以存储树结构(如嵌套 cmets)而不使用反模式等的数据库。
我认为 LDAP 是其中之一,但还有其他的吗?

我还需要能够索引子级。我需要能够轻松地将分支从一个节点移动到另一个节点并快速读取 + 格式。

我见过其他类似的问题。那些(对我来说)的问题是他们问在 db XXX 中最有效的方法是什么,而我问我应该使用哪个 DB。

【问题讨论】:

  • 大多数文档数据库不适合这个吗?或者,查看图形数据库
  • @Oded - 今天我研究了 MongoDB,看来它不是 stackoverflow.com/questions/8547886/… 我会假设其他人也一样,如果你知道,请发布它的名字。
  • 看看 RavenDB 和 Neo4J。我不确定“不使用反模式等”是什么意思——它非常抽象。
  • 您会寻找图形数据库而不仅仅是 NoSql
  • 您几乎肯定希望将数据本身存储为 XML。那么问题就变成了“存储、检索和操作 XML 的最佳方式是什么”?

标签: database performance tree linked-list store


【解决方案1】:

如果树很深,关系数据库就不是最好的选择。我会推荐一个图形或对象数据库。

“存储 cmets”?喜欢下面的博客或文章?如果是这样的话,我会说你可以假设它们不会那么深。十级评论树将是例外。

在这种情况下,使用外键的简单关系父/子关系就足够了:

CREATE TABLE IF NOT EXISTS article
(
    article_id integer not null auto_increment,
    comment_id integer,
    primary key(article_id),
    constraint fk_comment foreign key(comment_id) references article(article_id) on delete cascade on update cascade
);

【讨论】:

  • :-D 检查它tapuz.co.il/Forums2008/… 希望它被限制为“仅”为 10 这只是众多帖子中的一个...
  • 你知道关系数据库不能工作吗?尝试直到没有,然后切换到图形数据库之类的东西。 XML 也是分层的。
  • 你添加索引了吗?分析代码?解释计划?你知道“慢”的根本原因吗?
  • 有数据支持吗?您是否对应用程序进行了概要分析?看记忆?如果你说“是”,我会感到惊讶。
  • 好吧,不是记忆,但我已经“硬编码”了大约 200 个帖子的单个页面的树,并且差异很明显。我的意思是硬编码,我生成了树,然后只缓存那个输出(apc)。
【解决方案2】:

“关系数据库”当然强调“表”(二维关系)。

在 RDBMS 供应商中,有许多不同的选择。例如,DB2 有“分层结构”,Oracle 有“分层查询”:

更一般地说,大多数主要的 RDBMS 产品(MS Sql Server、IBM DB2、Oracle)都已支持 XML。这为处理结构化数据提供了一种更强大、更便携的方法。

当然,在非 RDBMS 供应商中,处理非关系数据(如树)的选择更多。相应地,可移植性较差 - 将自己锁定在一个“非 SQL 数据库”中往往会导致您无法轻松地将应用程序迁移到其他数据库。

底线:

如果您可以将 XML 与关系数据库一起使用,那可能是您的最佳选择。这里有一些很好的链接:

'希望有帮助!

【讨论】:

  • 关系表包含 n 维点集(SQL 表包含袋子)并表示 n 元关系(船)/关联。 (在 FK 或 FK 约束的意义上,被伪关系和伪 ERM 表示误用的“关系(船)”确实在 FK 的子元组和引用的子行上具有相关的二维关系。)(具有讽刺意味的是,最基本的树的形式可以表征为节点上的二元关系。)
猜你喜欢
  • 2015-04-16
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 2013-07-29
  • 2011-05-27
  • 1970-01-01
相关资源
最近更新 更多