【发布时间】:2013-09-19 02:42:22
【问题描述】:
我正在尝试构建一个架构来存储网站导航地图。将典型的数据集想象成一个站点地图,其中页面可以有子页面,而这些子页面可以有更多的子页面。一个例子是以下对象:
$tree = array(
'home' => array(
'h1' => 'test',
'h2' => 'test2',
'copy' => 'copy here',
'slug' => '',
'children' => array(
'blah' => array(
'h1' => 'child1',
'h2' => 'child1',
'copy' => 'child copy here',
'slug' => 'blah',
'children' => array(
'blahsub' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'blahsub',
'children' => array(
'subsubchild1' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild1'
)
)
),
'subchild2' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'subchild2',
'children' => array(
'subsubchild2' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild2'
)
)
),
'subchild3' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'subchild3',
'children' => array(
'subsubchild3' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild3'
)
)
)
)
),
'another' => array(
'h1' => 'child2',
'h2' => 'child2',
'copy' => 'child copy here',
'slug' => 'another'
)
)
)
);
$tree 的每一层都由它的 URI 来索引,每一层可以包含 N 个子节点,每个子节点都可以有自己的子节点。
我最初的想法是使用这个模式很直观,但是我不确定查询树的特定节点。我接近这个模式错了吗? (目标是不必进行多次查询以在每个请求上“构建”这样的树,而是将其拉一次并在内存中使用它。
注意:我仍然可以进行查询以拉取整个树,然后通过下标运算符直接访问每个节点。这应该比对树的多个查询提供更好的性能。目前为此使用 mysql,这是一个真正的瓶颈。
请分享您对此架构的看法,如果有不清楚的地方,请要求澄清。
谢谢!
注意 - 主要目标:我想通过它们的“索引”(也是每个节点的“slug”参数)在树中查找项目。我真的不知道从哪里开始——这样的查询功能是否存在?必须在多个查询的循环中完成吗?
【问题讨论】:
-
如果它是/曾经是瓶颈,您可能需要考虑缓存以前获取的结果。
-
你想做什么?只获取嵌套元素的一部分?展示您尝试过的内容会有所帮助。
-
我想通过它们的“索引”(也是每个节点的“slug”参数)在树中查找项目。我真的不知道从哪里开始——这样的查询功能是否存在?必须在多个查询的循环中完成吗?
标签: php mongodb tree mongodb-query