#H2 Database特徴
- H2のメリット
- Javaのプログラムに組み込めること
- Embedded and server modes; in-memory databases
The main features of H2 are:
- Very fast, open source, JDBC API
- Embedded and server modes; in-memory databases
- Browser based Console application
- Small footprint: around 2 MB jar file size
H2 | Derby | HSQLDB | MySQL | PostgreSQL | |
---|---|---|---|---|---|
Pure Java | Yes | Yes | Yes | No | No |
Memory Mode | Yes | Yes | Yes | No | No |
Encrypted Database | Yes | Yes | Yes | No | No |
-
Pure java:Javaで作られてる
- ex: H2/Derby/HSQLDB
- 自分のアプリケーションに埋め込めるのでアプリ起動時に自動で立ち上がる
- Embedded / server modes / in-memory databasesの3つのモードが使える
###server modes
- h2サーバ立ち上げてたら他のサーバからもアクセスできる
###in-memory databases modes
- インメモリで動かす
- Java仮想マシン上のJavaプログラム内で
h2.start();
で起動 - インメモリはDataをインサート文でSQL文でデータを吐き出した時に、HDDや外部にデータが保存されずメモリ上に保存される
- 再起動で消える
- メモリの中にしかないので他のサーバから見れない
- インメモリでは次回に起動した時にDBもクリアになっているので開発ではよく使う!
###Embedded modes
- in-memory同様、Java仮想マシン上のJavaプログラム内で動く
- データは外部にHDD/SSD保存
- 外からアクセスできる
- クラッシュしてもデータ残ってる
- DBのユニットテストするときにDB更新かけてしまうと同じユニットテストできない
#H2とJDBCの関係
-
従来はDBに対してApplicationからオラクルなどDB固有のライブラリを使って直接アクセスすることが多かった(C++でOracleLibを使うなど)
-
この方法ではDBを自由に変更、製品を組み替えできない (Oracle版とかMySQL版とかにできない)
-
→JavaではJDBCが解決!
-
DBアクセス基本
- JDBC:SQL抽象化メカニズム
- 直接Oracle叩くのではなくJDBCの
jdbc_url
を元に指定先のDB (Oracleなど)にアクセス - オラクルのライブラリをJDBCがアクセスしRDBにアクセスことで一段抽象化する
-
jdbc_url
を読んでh2と書いてる場合、JDBCはh2のライブラリを通してH2DBにアクセス
-
アプリとRDBが直接結合(密結合)だったのが、JDBC(抽象化モジュール)を介することで、アプリとRDBが間接的になる!(疎結合になる)
- アプリはDBが何であるかに関与する必要なく、URLでどこにアクセスすればいいかのみ知っていればいい(JDBCがURLでDBにアクセス)
-
RDBが何であってもアプリ側で変更不要でJDBCがいい感じにやってくれるということ!