2017-02-22 102 views
0

我想最简单的事情将是一个平坦的列表:在MongoDB中存储树数据结构的最有效方法是什么?

{ 
    id: ObjectId() 
    parentId: ObjectId() 
    value: ‘foo’, 
} 

只是一个大集合。要查找节点的子节点,只需搜索列表并查找parentId等于当前节点ID的所有实例。 id/parentId上的索引。

这可能会更快写入,但读取可能会变得非常可怕。 我们将有更多的读取比写入!

MongoDB的具有某种建在树的数据结构: https://docs.mongodb.com/manual/applications/data-models-tree-structures/

但我想知道如何从一个平面列表就像我提出的一个不同。

回答

1

如果您在idparentId上的索引上定义索引,请查找节点的子节点应该非常快。

为什么你认为这会是可怕的?


UPDATE:最坏的情况将是O(log N)但值得注意的是,桶大小蒙戈采用的是8192(source)是很重要的。这意味着这次会有一个非常小的常量,这意味着MongoDB操作可以非常快。

+0

这不会那么糟糕。但是每次你需要找到一个节点的孩子时,你都必须查看同一个集合并重新读取它。最糟糕的情况我认为是log(n)时间来读取整个事物的索引。 –

+1

@AlexanderMills是的,但是由于树形桶的大小,它们非常快。我更新了我的答案。 – Lucas

相关问题