2010-10-04 10 views
3

Nous utilisons MongoDB pour collecter des journaux sur les pages vues.Création d'index sur les nouvelles collections dans MongoDB + PHP

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

Le code ci-dessus crée une nouvelle collection pour chaque jour.

Je voudrais pouvoir créer un index sur la collection ci-dessus quand elle est créée. Est-ce qu'il y a un moyen de faire ça?

  1. Dans un SGBDR traditionnel, ceci est accompli à travers le schéma. Y a-t-il quelque chose de similaire dans MongoDB? Est-il possible de configurer la base de données pour créer des index sur de nouvelles collections?
  2. Sinon, quelle est la meilleure façon d'accomplir cela en PHP? Je ne veux pas appeler ensureIndex chaque fois que j'appelle insérer

Répondre

3

Vous pouvez les pré-créer, car il est pas exactement un secret que les collections dont vous aurez besoin :)

Vous pouvez exécuter quelque chose comme:

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 va créer la collection si elle doesn n'existe pas déjà.

4

Pour éviter d'appeler ensureIndex sur chaque insert Je pense que votre meilleur pari (en plus d'utiliser seulement 1 collection que vous avez des problèmes de performance avec) serait exécuter un cron-job tous les jours, par exemple, à 23h, ce qui crée la collection/index pour la collection correspondant au jour à venir.

Questions connexes