3

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

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

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

我希望能够在创建上述集合时为其创建索引。有没有办法做到这一点?

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

2 回答 2

4

为了避免调用ensureIndex每个插入,我认为你最好的选择(除了只使用一个你有性能问题的集合之外)是每天在晚上 11 点运行一个 cron-job,它为对应于的集合创建集合/索引即将到来的一天。

于 2010-10-04T19:56:45.623 回答
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如果集合尚不存在,将创建该集合。

于 2010-10-05T00:37:02.593 回答