Asakusa Framework Advent Calendar 2016の14日目です。
今日は、2016/12/6にリリースされたAsakusaFW 0.9.0のちょいネタ、threads.commitについてです。
AsakusaFWはトランザクションの考え方を持っていて、Direct I/Oでファイルを出力するとき、一旦一時領域にファイルを出力し、全て出力し終わったら最終格納場所へ移動するという仕組みになっています。
これにより、簡易的なトランザクション(処理が成功したときだけ出力し、失敗したときは何も出力しない(中途半端な状態を残さない))を実現しているわけです。
この一時領域の場所や、そもそもこの仕組みを使うかどうか等はデータソースの定義で変更することが出来ます。
この定義に、AsakusaFW 0.9.0でthreads.commitというプロパティーが追加になっていました。
一時領域から最終格納場所への移動はシングルスレッドで行われていますが、このプロパティーを設定することで、マルチスレッドで実行されるようです。
とはいえ、普通は移動はメタデータの変更だけなのでほとんど時間はかからないはずで、シングルスレッドで充分だと思います。が、一時領域が最終格納場所と別ファイルシステムだったりMapRで別ボリュームだったりすると、移動ではなく転送(コピー&削除)になって時間がかかることがあるので、複数ファイルの転送を行うならマルチスレッドにした方が速くなることがあるのかもしれません。