2010-10-04 77 views
3

我們使用MongoDB在瀏覽量上收集日誌。在MongoDB + PHP中爲新集合創建索引

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

上面的代碼爲每一天創建一個新的集合。

我希望能夠在創建上述集合時創建索引。無論如何要做到這一點?

  1. 在傳統的RDBMS中,這是通過模式完成的。 MongoDB中有類似的東西嗎?是否可以將數據庫配置爲在新集合上創建索引?
  2. 如果沒有,在PHP中完成此操作的最佳方法是什麼?我不想叫ensureIndex每次我打電話插入

回答

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將創建集合,如果它不已經不存在了。

4

,避免每次插入我覺得你最好的選擇(除了只使用1個與您有性能問題收集)調用ensureIndex將每天在下午11點運行一個cron-job,這會創建與即將到來的一天相對應的集合的集合/索引。