開発

【開発】データベースの種類・H2データベースが本番環境で使われない理由

こんにちはすずきです。
今回は開発でデータベースを選ぶ際に「どんなデータベースがあるのか」や、「H2データベースは本番環境で使われない」を詳しく深ぼっていこうと思います。

記事の内容

  • データベースの種類
  • 各データベースの特徴
  • H2データベースが使用されない理由

この記事では、代表的なデータベースの種類と、特に開発環境でよく使用されるH2データベースが本番環境で使われない理由について詳しく解説していきます!

データベースとは

データベースとは、特定のデータを収集し、データを整理して使いやすいように管理している情報群または、管理するためのシステムまたは構造のことをさしています。

データモデルには、階層型、ネットワーク型、リレーショナル型などがあります。
※他にもドキュメント型、カラムファミリー型、グラフ型..etcなどがあります。

現在では、データベースといえば、リレーショナルデータベースが主流です。

データベースの種類

データベースは大きく分けて、リレーショナルデータベース(RDB)NoSQLデータベースNewSQLデータベースの3種類に分類されます。

リレーショナルデータベース(RDB)

先ほど紹介した、データを表形式で管理し、SQL(Structured Query Language)を使用してデータの操作を行うデータベースのことです。

代表的なリレーショナルデータベースには以下のものがあります。

名前説明
MySQLオープンソースであり、多くのウェブアプリケーションで使用されている。高速でスケーラブルな性能が特徴。
PostgreSQLオープンソースで高い拡張性と標準に準拠した機能を持つ。トランザクション処理が強力で、複雑なクエリを効率的に処理できる。
Oracle Database商用のデータベースであり、高い信頼性とセキュリティを提供。大規模な企業システムで広く使用されている。
Microsoft SQL ServerMicrosoft社による商用データベースで、Windows環境との高い親和性が特徴。ビジネスインテリジェンス機能も充実している。

NoSQLデータベース

NoSQLデータベースは、リレーショナルデータベースとは異なり、表形式に依存しないデータ管理を行います。特定の用途やスケーラビリティが求められるシステムに適しています。

すずき

リレーショナルデータベース以外のデータベースのこと!

スケーラビリティ

 拡張性という意味。 システムやネットワークなどが、規模や利用負荷などの増大に対応できる度合いのこと。

東京エレクトロン デバイス株式会社

以下が主なNoSQLデータベースの例です。

名前説明
MongoDBドキュメント指向データベースで、JSONライクなフォーマットでデータを保存。柔軟なスキーマ設計が可能。
Cassandra分散データベースであり、大規模なデータセットを扱うのに適している。可用性とパフォーマンスが高い。
Redisインメモリデータベースで、高速なデータ読み書きを実現。キャッシュ用途やリアルタイム分析に適している。
CouchDBドキュメント指向データベースで、マスター・マスターのレプリケーションをサポート。オフラインファーストアプリケーションに向いている。

NewSQLデータベース

NewSQLデータベースは、リレーショナルデータベースの特性を持ちながら、NoSQLのようなスケーラビリティを実現することを目指しています。

以下が代表的なNewSQLデータベースです。

名前説明
Google SpannerGoogleが提供する分散リレーショナルデータベースで、グローバルな分散環境でも一貫性を保つ。
CockroachDBPostgreSQL互換の分散データベースで、高い可用性とスケーラビリティを提供。ノードが増えると自動的にデータをリバランスする。
VoltDBインメモリのNewSQLデータベースで、高速なトランザクション処理を実現。リアルタイムアプリケーションに適している。

よくテストで使う、H2データベースとは

H2データベースはJavaで書かれた軽量なリレーショナルデータベースで、特に開発やテスト環境でよく使用されます
その主な理由は以下の通りです。

メリット

  • 軽量でインメモリ動作が可能
  • 簡単なセットアップと使用
  • 高い互換性
軽量でインメモリ動作が可能

H2は非常に軽量で、インメモリデータベースとしても動作するため、開発者が迅速にデータベースをセットアップしてテストを行うことができます。開発スピードが早い!!

簡単なセットアップと使用

H2はセットアップが非常に簡単で、JARファイルをダウンロードしてクラスパスに追加するだけで利用可能です。また、Webベースのコンソールも提供しており、GUIを使って簡単にデータベースの操作が可能!

高い互換性

H2は、標準的なSQLに対応しており、他のリレーショナルデータベース(例えば、HSQLDB、Derbyなど)とも互換性があります。これにより、開発環境で使用したSQLを本番環境のデータベースに容易に移行することができます。

これらの利点にもかかわらず、H2が本番環境で使用されることは稀なんだそうです。その主な理由は以下の通りです。

H2データベースが本番環境で使われない理由

デメリット

  • パフォーマンスとスケーラビリティの制限
  • 信頼性と耐障害性の問題
  • セキュリティ機能の不足
パフォーマンスとスケーラビリティの制限

H2は軽量であるがゆえに、大規模なデータセットや高トラフィックな環境でのパフォーマンスやスケーラビリティに限界があります。
大規模なアプリケーションや大量の同時接続を処理する能力が劣るため、本番環境での使用には不向きです。

すずき

シンプルに性能が弱い!

信頼性と耐障害性の問題

H2はインメモリ動作が可能であるため、再起動時にデータが失われるリスクがあります。
また、永続的なストレージ機能も提供していますが、商用データベースと比較して障害に対する耐性が低いため、データの一貫性や信頼性が求められる本番環境には適していません。

すずき

再起動するたびにデータが消えてたらサービスとして機能しない!

セキュリティ機能の不足

H2はセキュリティ機能が限定的であり、特に本番環境で求められる高度なセキュリティ対策(暗号化、監査ログ、アクセス制御など)が不足しています。これにより、セキュリティリスクが増大し、本番環境での使用が推奨されません。

すずき

結論、H2データベースは、早くて簡単に使えるけど、本番で使えるほどの拡張性や信頼・耐久力がないデータベースだからテスト環境でつかうのがメインってことだね!!

  • この記事を書いた人

鈴木陽介

現役Javaエンジニア

2000年生まれ

もうすぐ書籍を出版します。

-開発