著作一覧 |
アンケート処理のバッチ集計を考えてみる。
1アンケートずつファイルに収まっているものを読んでは、項目別の複数のテーブルに集計していく(sumできないビジネスルールがあることにしておく)。
すると、1レコード処理するのに0,2秒かかることがわかった。秒あたり5レコードだが、これを秒あたり50にするには、10レコード同時に処理すれば良いから読み取り専用のスレッドと10個の書き込み用スレッドをキューで繋げてやる。
ところが最初の方法と処理時間が変わらない。
処理順がアンケートの項目順なため、先頭の項目に対応した性別集計テーブル(3レコード)のロック待ちとなるからだ(ほぼ全てが女性ロウの更新)。
トランザクションを維持し、かつデータベースも変えず処理性能を向上させる方法を考えてみよう。
なお、アンケートには「ご意見」欄があり、ご意見テーブルにインサートする必要があるものとする。
シンプルに考えれば、結果がばらつく項目順に処理を入れ替えるのがコストパフォーマンスの面から良いと思うのだが(トランザクションというのはそういうことだ)。
ジェズイットを見習え |