开发者

Creating indexes on new collections in MongoDB + PHP

开发者 https://www.devze.com 2023-01-18 13:16 出处:网络
We use MongoDB to collect logs on pageviews. $collection_name = \"log开发者_运维问答s.\".date(\'Y\').\".\".date(\'m\').\".\".date(\'d\');

We use MongoDB to collect logs on pageviews.

$collection_name = "log开发者_运维问答s.".date('Y').".".date('m').".".date('d');
$collection = $this->Mongo->$collection_name;
$collection->insert($pageview);

The code above creates a new collection for every day.

I would like to be able to create an index on the above collection when it is created. Is there anyway to do this?

  1. In a traditional RDBMS, this is accomplished through the schema. Is there anything similar in MongoDB? Is it possible to configure the database to create indexes on new collections?
  2. If not, what is the best way to accomplish this in PHP? I don't want to call ensureIndex everytime I call insert


To avoid calling ensureIndex on every insert I think your best bet (besides using only 1 collection which you have performance issues with) would be to run a cron-job every day at, say, 11pm which creates the collection/index for the collection corresponding to the upcoming day.


You can pre-create them, since it's not exactly a secret what collections you'll need :)

You could run something like:

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 will create the collection if it doesn't already exist.

0

精彩评论

暂无评论...
验证码 换一张
取 消