3

フラッシュ()はどのくらい速いですか?persist() を使用してコレクションに数千のアイテムを追加し、コレクションを空にしてからフラッシュしています。

$dm = $this->get('doctrine.odm.mongodb.document_manager');

while(stuff))
{
     $item = new Item();
     $item->setItem("item stuff");           
     $dm->persist($item);
}

$qb = $dm->createQueryBuilder('Bundle:Item')->remove();
$query = $qb->getQuery();
$query->execute();

$dm->flush(); 

コレクションが空のままになる時間を知りたいです。リムーブとフラッシュの間。

4

1 に答える 1

3

単純な 2 フィールド ドキュメントのフラッシュをさまざまなバッチ サイズでプロファイリングするためのベンチマークを作成しました: https://gist.github.com/2725976

$ php src/benchmark.php 10 100 1000 10000 20000 50000 100000
Flushing     10 items took  0.014058 seconds and   2097152 bytes
Flushing    100 items took  0.024325 seconds and    524288 bytes
Flushing   1000 items took  0.196992 seconds and   5505024 bytes
Flushing  10000 items took  2.563700 seconds and  57933824 bytes
Flushing  20000 items took  6.291873 seconds and  89915392 bytes
Flushing  50000 items took 19.118011 seconds and 240386048 bytes
Flushing 100000 items took 58.582809 seconds and 469499904 bytes

ご想像のとおり、Mongo に実際にデータを挿入しても、これらの測定値のごく一部しか説明できません。Doctrine は、イベントのディスパッチや変更セットの計算などの手順を説明するのにかなりの時間を費やしますが、後者はドメイン モデルの複雑さに大きく影響されます。

UnitOfWork::commit() をflush()見ると、Doctrine 固有のすべての操作を追跡できます。

于 2012-05-18T16:02:58.240 に答える