Propel::getConnection で一括処理

多くのレコードに対し、繰り返し処理を行なうときのパフォーマンスアップ。

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 でこの方法を使うとよい。

2012年11月

        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  

アーカイブ