如何在数据库中存储金字塔结构

时间:2018-02-19 02:52:56

标签: node.js algorithm

我想将数据库结构存储在数据库中,最好是在NoSQL中存储mongodb

所以如果我有一个像下面这样的结构

    0
  0   0    <-tier 2
0   0   0  <-tier 1

*每个零都是一个节点,每个级别都是一个层,每个节点都连接到单个下一层节点

我最初想到的是将直接父节点的objectID存储到每个子节点中 - 这样我就可以通过搜索前一节点引用的节点来连续爬上阶梯。但是,这需要多个查询才能达到顶峰,我认为它在性能方面不会非常有利,特别是如果我必须搜索许多节点的最高父节点。

所以我想到的另一种方法是将每个父节点按顺序存储到每个节点中,这样我就可以通过检索单个节点来获得第n个父节点。但是,感觉这会导致存储大量不必要的数据而不是以前的解决方案。

除了我的想法之外,还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果金字塔结构是常规的,你可以将每个元素存储在数组中而不浪费空间,并且仍然可以解决元素从其位置进入数组的位置,反之亦然。

如果你绘制的每行中元素的数量是1,2,3,4,5 ...那么前n行(从1开始计算)中元素的数量是1 + 2 + 3 + ..n = n(n + 1)/ 2(这只是算术级数的总和)。再次从1开始计数,行j中的元素i是从j(j + 1)/ 2 + i-2的零开始计数的数组偏移量。要从数组偏移量中找到行号,可以使用二进制斩波。