在MongoDB + PHP中为新集合创建索引

时间:2010-10-04 18:38:48

标签: mongodb mongodb-php

我们使用MongoDB收集网页浏览日志。

$collection_name = "logs.".date('Y').".".date('m').".".date('d');
$collection = $this->Mongo->$collection_name;
$collection->insert($pageview);

上面的代码每天都会创建一个新的集合。

我希望能够在创建上面的集合时创建索引。反正有吗?

  1. 在传统的RDBMS中,这是通过模式完成的。 MongoDB中有类似的东西吗?是否可以配置数据库以在新集合上创建索引?
  2. 如果没有,在PHP中实现这一目标的最佳方法是什么?每次调用 insert
  3. 时,我都不想调用 ensureIndex

2 个答案:

答案 0 :(得分:4)

为了避免在每次插入时调用ensureIndex我认为你最好的选择(除了只使用一个你遇到性能问题的系列)就是每天运行一个cron-job,比如说,晚上11点创建与即将到来的一天相对应的集合的集合/索引。

答案 1 :(得分:3)

您可以预先创建它们,因为您需要的集合并不完全是秘密:)

你可以运行类似的东西:

for ($month = 0; $month < 12; $month++) {
    for ($day = 0; $day < 31, $day++) {
       $c = $db->getCollection("logs.2010.$month.$day");
       $c->ensureIndex(array("foo" => 1));
    }
}
如果该集合尚不存在,

ensureIndex将创建该集合。