Propel::getConnection で一括処理

| コメント(0) | トラックバック(0)
多くのレコードに対し、繰り返し処理を行なうときのパフォーマンスアップ。

Task テーブルから、複数のタスクを取得し、処理を行ないながらタスクをデリートしていく例。
何も考えずにやると、このようなコードに。

foreach ($tasks as $t)
{
    :
   (タスク処理)
    :
  $t->delete();
}


数が多くなってくると、処理時間の長さが気になってくる。
とくに SQLite を使っているときは、delete のパフォーマンスがネックになりやすい。

そんなときは、このように同じコネクションを使い回す。

$con = Propel::getConnection(TaskPeer::DATABASE_NAME);
$con->begin();
foreach ($tasks as $t)
{
    :
   (タスク処理)
    :
  $t->delete($con);
}
$con->commit();

もちろん、delete ではなく、save でも同様のことができる。
レコードを巡回しながら、特定の値を一括して変更したいときなどには、save でこの方法を使うとよい。

トラックバック(0)

トラックバックURL: http://mikagamikobo.com/cgi/MTOS-4.21-ja/mt-tb.cgi/11

コメントする

2009年8月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

アーカイブ