Создание индексов для новых коллекций в MongoDB + PHP - PullRequest
3 голосов
/ 04 октября 2010

Мы используем MongoDB для сбора журналов просмотров страниц.

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

Приведенный выше код создает новую коллекцию на каждый день.

Я хотел бы иметь возможность создавать индекс вышеупомянутой коллекции при ее создании.Есть ли способ сделать это?

  1. В традиционных СУБД это достигается с помощью схемы.Есть ли что-нибудь подобное в MongoDB?Можно ли настроить базу данных для создания индексов для новых коллекций?
  2. Если нет, каков наилучший способ сделать это в PHP?Я не хочу звонить sureIndex каждый раз, когда я звоню insert

Ответы [ 2 ]

4 голосов
/ 04 октября 2010

Чтобы не вызывать ensureIndex для каждой вставки, я думаю, что лучшая ставка (помимо использования только 1 коллекции, с которой у вас есть проблемы с производительностью), состоит в том, чтобы запускать задание cron каждый день, скажем, в 11 вечера, который создает коллекцию /указатель для коллекции, соответствующей предстоящему дню.

3 голосов
/ 05 октября 2010

Вы можете предварительно создать их, поскольку не совсем секрет, какие коллекции вам понадобятся:)

Вы можете запустить что-то вроде:

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 создастколлекция, если она еще не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...