2011-01-08 168 views
5

我正在开发一个使用非关系数据库作为后端的Web应用程序(django-nonrel + AppEngine)。 我需要存储一些分层数据(项目/子项目_1 /子项目_N /任务),我想知道我应该使用哪种模式。现在我想的:关于非关系数据库的分层数据的建议?

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

在我的情况下,嵌套的深度对于普通用户不会超过4-5级。 此外,在用户界面上,我希望为第一级的项目分页,以避免在第一次加载页面时加载太多项目。

从我了解到目前为止,嵌套集是伟大的,当层次更多地用于显示。当在树上进行编辑经常完成时,邻接列表非常棒。在我的情况下,我想我需要的显示比编辑更多(当使用嵌套时,即使显示效果很好,上面的分页可能会使编辑变得复杂)。

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

回答

1

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

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

0

我已经使用SQL Server来存放非关系数据。 SQL Server有这些东西叫层次结构ID ..这使得大部分透明。

你的确切问题是什么?