关于非关系数据库的分层数据的建议?

时间:2011-01-08 14:08:03

标签: google-app-engine django-nonrel hierarchical-trees

我正在开发一个使用非关系数据库作为后端的web应用程序(django-nonrel + AppEngine)。 我需要存储一些分层数据(projects / subproject_1 / subproject_N / tasks),我想知道我应该使用哪种模式。现在我想到了:

  • 邻接列表(存储项目的父ID)
  • 嵌套集(存储项目的左右值)

在我的情况下,普通用户的嵌套深度不会超过4-5级。 此外,在UI上,我想对第一级的项目进行分页,以避免在第一页加载时加载太多项目。

据我所知,到目前为止,当层次结构更多地用于显示时,嵌套集很好。当经常在树上进行编辑时,邻接列表很棒。在我的情况下,我想我需要显示的不仅仅是编辑(当使用嵌套集时,即使显示效果很好,上面的分页也会使编辑时的内容复杂化。)

根据您对非关系型数据库的经验,您有什么想法和建议吗?

2 个答案:

答案 0 :(得分:1)

如何存储它们取决于您需要如何查询它们。例如,如果您只需要查找父项的直接子项,则邻接列表模型可能是最简单的。如果你想枚举整个子树,祖先列表或嵌套集合可以正常工作 - 虽然我会避免在App Engine上嵌套集。

如果您需要树中所有对象的事务完整性 - 并且不会更频繁地更新整个树,而不是每秒几次 - 您应该查看App Engine对实体组和祖先的支持。 / p>

答案 1 :(得分:0)

我使用SQL Server来存放非关系数据。 SQL Server将这些东西称为hierarchyID ..这使得大部分内容都是透明的。

你遇到的确切问题是什么?