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 で作成する場合に限った利用方法です。