H2 Database に向く Web アプリケーション
H2 Database のロック機構は、テーブルロックしかなく、かつ EXCLUSIVE と SHARED の2種類しかないという単純なものです。
- EXCLUSIVE ロックは EXCLUSIVE ロックとも、SHARED ロックとも競合する。SHARED ロックどうしは競合しない。
- insert, update, delete といった更新系の処理は、EXCLUSIVE ロックを要求する。
- select は、SHARED ロックを要求する。ただし select for update は EXCLUSIVE ロックを要求する。
上記から考えると、insert, update, delete を実行するトランザクションが走っている間は、select は待たされることになります。
H2 Database のドキュメントにも記載されていますが、これは同時実行並列性が低いといえます。(代わりに高速に動作するという長所を得ている。)
この特性を考慮すると、H2 Database を利用可能なWebアプリケーションの特性が見えてきます。
- 長時間実行する、更新系トランザクションがある
- 複数のテーブルのデータをまとめて更新する、更新系トランザクションがある
- 更新系トランザクションの割合が高い
- 多数のユーザがアクセスする等、同時並行で複数のトランザクションが走る
ようなWebアプリケーションで利用するにおいては、注意が必要です。
少数の更新系トランザクションによってテーブルがロックされ、データの参照すら行えないという事象が多発する可能性があります。
逆に軽量高速なので、上記に該当しない場合には、向いていると思います。(ただしデータ量次第なので注意が必要)
またオンメモリで動作させることもできるので、メインのデータベースではなく、サブのデータベースとして使うということも考えられます。
ただしこれは、Web アプリケーションを Java で作成する場合に限った利用方法です。