Создание индексов на новые коллекции в MongoDB + PHP
-
27-09-2019 - |
Вопрос
Мы используем MongoDB для сбора журналов на страницах.
$collection_name = "logs.".date('Y').".".date('m').".".date('d');
$collection = $this->Mongo->$collection_name;
$collection->insert($pageview);
Код выше создает новую коллекцию на каждый день.
Я хотел бы иметь возможность создать индекс на приведенной выше коллекции, когда он создан. Есть какой-либо способ сделать это?
- В традиционных RDBMS это достигается через схему. Есть что-нибудь похожее в MongoDB? Можно ли настроить базу данных для создания индексов на новые коллекции?
- Если нет, какой лучший способ выполнить это в PHP? Я не хочу звонить обеспечение каждый раз, когда я звоню вставлять
Решение
Вы можете предварительно создать их, так как не совсем секрет, какие коллекции вам понадобится :)
Вы могли бы запустить что-то вроде:
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
создаст коллекцию, если она еще не существует.
Другие советы
Чтобы избежать звонка ensureIndex
На каждой вставке я думаю, что ваша лучшая ставка (помимо использования только 1 коллекции, с которыми у вас есть проблемы с производительностью), было бы управление работой CRON каждый день, скажем, 11 вечера, что создает коллекцию / индекс для коллекции, соответствующей предстоящему дню Отказ