symfonyでバルクインサート・アップデート

バルクインサート/アップデートとは?
一言で言えば「一括でデータの挿入・更新をする」です。
symfonyではDoctrineというモノを経由して
データの登録・更新処理をしています。
メリットデメリット
メリット
一括でアプリケーション側から実施するためデータ更新のタイミングがズレない
一つでも失敗したら全て例外として”実行されない”
一括でアプリケーション側から実施するためデータ更新のタイミングがズレない
一つでも失敗したら全て例外として”実行されない”
デメリット
大量のデータ更新・登録の際にDBへの負荷が大きい
上記に伴って失敗したら何も更新されない
デメリットの解消法
サーバーのスペック等によって一括処理のしきい値をアプリケーションレベルで設定する。
以下はSymfonyのDoctrineを介した更新時の例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $em = $this->get('doctrine')->getEntityManager(); $cnt = 0; $bulk_num = 10;// 同時に更新するデータの単位 // 処理 // 適当なループ foreach ($hoges as $hoge) { // 登録 $em->persist($hoge); if (($cnt % $bulk_num) == ) { $em->flush(); } $cnt++; } $em->flush(); |
概要は
「データ登録毎にカウントしていき、しきい値に達した時点で初めて登録を実行する(flush)」
Author Profile

スターフィールド編集部
SHARE