【发布时间】:2011-11-06 10:30:28
【问题描述】:
我有一个 mongodb 集合,其中包含许多领域的书籍。与我的问题相关的一些关键领域是:
{
book_id : 1,
book_title :"Hackers & Painters",
category_id : "12",
related_topics : [ {topic_id : "8", topic_name : "Computers"},
{topic_id : "11", topic_name : "IT"}
]
...
... (at least 20 fields more)
...
}
我们的搜索页面上有一个用于过滤结果的表单(包含许多输入/选择框)。当然还有分页。通过过滤的结果,我们在页面上显示所有类别。对于每个类别,在该类别中找到的结果数量也会显示在页面上。
我们尝试使用 MongoDB 而不是 PostgreSQL。因为性能和速度是我们这个过程的主要关注点。
现在的问题是:
我可以通过向“查找”函数提供所有过滤器参数来轻松过滤结果。这很酷。我可以使用跳过和限制功能对结果进行分页:
$data = $lib_collection->find($filter_params, array())->skip(20)->limit(20);
但我必须在分页发生之前收集为每个 category_id 和 topic_id 找到的结果数。而且我不想用 PHP “foreach”所有结果、收集类别和管理分页,因为过滤后的数据通常包含近 200.000 个结果。
问题 1: 我在 PHP 手册中找到了带有“不同”示例的 mongodb::command() 函数。我认为我通过这种方法获得了不同的价值。但是命令函数不接受条件参数(用于过滤)。我不知道如何在要求不同的值时应用相同的过滤器参数。
问题 2: 即使有一种方法可以使用 mongodb::command 函数发送过滤器参数,该函数也将是过程中的另一个查询,并且与我认为以前的查询。这将是另一个速度惩罚。
问题3:为了得到不同的topic_ids,结果数量将是另一个查询,另一个速度惩罚:(
我是 MongoDB 的新手。也许我从错误的角度看待问题。您能帮我解决问题并就最快的获取方式发表您的意见吗:
- 过滤结果
- 分页
- 找到的结果数量不同的值
来自大型数据集。
【问题讨论】:
-
数据集多久更改一次?
标签: php performance mongodb filtering distinct