3

MongoDB を使用して、ページビューのログを収集します。

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

上記のコードは、毎日の新しいコレクションを作成します。

上記のコレクションの作成時にインデックスを作成できるようにしたいと考えています。とにかくこれを行うことはありますか?

  1. 従来の RDBMS では、これはスキーマによって実現されます。MongoDB に似たようなものはありますか? 新しいコレクションにインデックスを作成するようにデータベースを構成することはできますか?
  2. そうでない場合、PHP でこれを達成するための最良の方法は何ですか? insertを呼び出すたびにensureIndexを呼び出したくない
4

2 に答える 2

4

すべての挿入で呼び出しを避けるためensureIndexに、(パフォーマンスの問題があるコレクションを 1 つだけ使用する以外に) 最善の策は、毎日午後 11 時に cron ジョブを実行して、対応するコレクションのコレクション/インデックスを作成することだと思います。来る日。

于 2010-10-04T19:56:45.623 に答える
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コレクションがまだ存在しない場合は作成します。

于 2010-10-05T00:37:02.593 に答える