トップ «前の日記(2010-02-12) 最新 次の日記(2010-02-14)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2010-02-13

_ ロッキング

アンケート処理のバッチ集計を考えてみる。

1アンケートずつファイルに収まっているものを読んでは、項目別の複数のテーブルに集計していく(sumできないビジネスルールがあることにしておく)。

すると、1レコード処理するのに0,2秒かかることがわかった。秒あたり5レコードだが、これを秒あたり50にするには、10レコード同時に処理すれば良いから読み取り専用のスレッドと10個の書き込み用スレッドをキューで繋げてやる。

ところが最初の方法と処理時間が変わらない。

処理順がアンケートの項目順なため、先頭の項目に対応した性別集計テーブル(3レコード)のロック待ちとなるからだ(ほぼ全てが女性ロウの更新)。

トランザクションを維持し、かつデータベースも変えず処理性能を向上させる方法を考えてみよう。

なお、アンケートには「ご意見」欄があり、ご意見テーブルにインサートする必要があるものとする。

シンプルに考えれば、結果がばらつく項目順に処理を入れ替えるのがコストパフォーマンスの面から良いと思うのだが(トランザクションというのはそういうことだ)。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え