データベースは、想像しうるほぼすべてのアプリケーションにとって不可欠なバックエンドストレージツールとなっています。アプリケーションでデータを扱うには、そのデータを素早く保存し、取り出すためにデータベースが必要です。

データベース管理システム(DBMS)は、データベースのデータの使用、検索、検証といった操作のルールを定義する設計のソフトウェアです。DBMSには、リレーショナル型、オブジェクト指向型、階層型、ネットワーク型など、さまざまなタイプがあります。

適切なDBMSの選択は、アプリケーション開発を効率化する上で不可欠です。とは言え、MySQLMariaDBSQLitePostgreSQLNeo4jなど、多くのオープンソースDBMSがあり、プロジェクトに適したデータベースを選択するのは時に困難になります。

そこで今回は、人気の高い2つのオープンソース管理システム、MySQLとSQLiteを比較し、その仕組みや基本的な違い、長所と短所、そして最後にWordPressに適しているのはどちらかといった点を詳しくご紹介します。

オープンソースデータベースの利点

プロプライエタリなDBMSは数多く存在しますが、オープンソースのデータベースが最も人気があることが証明されています。その主なメリットは以下の通りです。

  • データベースの情報が他と共有されないため、セキュリティ上の利点がある
  • データ量やリクエストの増加に対応するための拡張コストが低い
  • オープンソースデータベースの中には、アベイラブルソースベースで運用されているものもあり、アプリケーションのニーズに柔軟に対応することができる

SQLiteとは

前述したように、DBMSは主に4つのタイプから構成されます。そのほとんどは、データをツリー状に組織化し、リンクで接続した階層的なモデルで扱います。

SQLiteはオープンソースのリレーショナルデータベース管理システム(RDBMS)です。RDBMSは、1つの大きなテーブルではなく、複数の2次元のテーブルにデータを格納します。各テーブルはキーと呼ばれる一意の値を含む行(レコード)で構成され、このキーがテーブル間の関連付けに使用されます。その性質から、リレーショナルと呼ばれます。

RDBMSのキーには、主キーと外部キーの2種類があります。主キーはデータベースの各行を識別する固有の値で、外部キーは他のテーブルを参照するのに使うことができます。例えば、ある会社の従業員のデータベースがあるとします。従業員テーブルに部署名を追加する必要はありません。そのかわりに、従業員テーブルの部署を参照するカラム(外部キー)を追加します。すると、この外部キーが「department(部署)」テーブルの特定の行を参照することができます。

SQLiteは、その名が示すように、設定、管理、保存に関して軽量(light=軽い,軽量)です。

ほとんどのデータベースはサーバープロセスを必要としますが、SQLiteはサーバーレスです。つまり、アプリケーションはクライアントサーバーアーキテクチャなしで直接データを読み書きすることができます。また、サーバーレスのSQLiteは、インストールや設定が不要なため、自己完結型でオペレーティングシステム(OS)への依存度が低くなっています。

これらの特徴から、SQLiteはIoT(モノのインターネット)、組み込みアプリケーション、デスクトップアプリケーションに適しています。

MySQLとは

高速で信頼性が高く、習得が容易なMySQLは、ほとんどのアプリケーションで優先的に使用される人気のDBMSです。

SQLiteとは異なり、MySQLはクライアントサーバーモデルに準拠しており、実行するにはサーバーが必要です。サーバーは、構造化クエリ言語(SQL)を使用して、データの取得、操作、追加などのコマンドを処理します。

MySQLには、データにアクセスするためのMySQL Workbenchと呼ばれるグラフィカルユーザーインターフェース (GUI) が組み込まれています。また、データを管理を担うmysqladminと呼ばれるコマンドラインインターフェース(CLI)もあります。

さらに、MySQLはプラットフォームに依存しないので、どのOSでも動作し、Python、Java、C++などのさまざまなプログラミング言語と互換性があります。

人気の高いDBMSであることは、もう一つの利点として、大規模なコミュニティの存在を意味します。MySQLを学習するための解説がインターネット上に数多く公開されており、ほとんどの質問や問題に対する回答がオンラインで見つかります。MySQLはOracleが保守しているため、チュートリアル、認証、サポートはMySQLのウェブサイトで見つけることができます。また、MySQLについては、Kinstaのブログでも頻繁に紹介しています。

SQLiteとMySQLの比較─用途

MySQLとSQLiteはどちらもオープンソースのRDBMSですが、そのアーキテクチャと使用事例は大きく異なります。

アーキテクチャ

MySQLは、クライアント、サーバー、ストレージからなる複数層の構造を採用しています。クライアント層は、GUIまたはCLIを使用してユーザーのクエリとコマンドを処理します。サーバー層はコマンドのロジックを処理し、各リクエストに対して新しいスレッドを作成します。最後に、ストレージ層がデータテーブルの保存を担当します。

一方、SQLiteはサーバーレスDBMSで、SQLをバイトコードにコンパイルし、それを仮想マシンで実行します。バックエンドはB木(B-tree)の実装により、ディスク上にテーブルを格納します。

データ型

ほとんどのDBMSと同様に、MySQLはデータストレージに静的型を使用します。つまり、テーブル作成時にカラムのデータ型を定義する必要があります。

ほとんどのデータベースエンジンは文字列データに対して静的な型を使用していますが、SQLiteはデータの保存に動的な型を使用します。つまり、カラムに保存された値がカラムのデータ型を決定します。例えば、作成時に整数型のテーブルを作成した場合、型はそのコンテナではなく値自体に関連付けられるため、このカラムに任意のデータ型を格納することができます。さらに、MySQLは一般的な静的型に対して後方互換性を持っています。

データ型の代わりに、SQLiteはデータ用のストレージクラスを使用します。これはデータ型よりも汎用的で、NULL、INTEGER、TEXT、BLOB、REALのいずれかを取ることができます。

スケーラビリティ

MySQLのサーバークライアントモデルは、スケーラビリティと大規模データベースのことを考慮した設計になっています。サーバー層は、クライアント側を更新することなくサーバーの機能を簡素化します。

逆に、SQLiteはシングルユーザーのアクセスに制限されるため、スケーラビリティの面で劣ります。また、データベースが大きくなると、必要なメモリ量も増加します。

移植性

MySQLは移動前に1つのファイルに圧縮する必要があり、データベースが大きくなると時間がかかることがあります。一方、SQLiteはデータベースを1つのファイルに保存するため、コピーや移動が簡単にできます。また、SQLiteは仮想マシン上でクエリを実行するため、OSへの依存度が低いのが特徴です。

セキュリティ

SQLiteの単一データファイルは、誰でも編集・閲覧することができます。SQLiteには認証システムが組み込まれていないため、セキュリティはそのファイルに設定されたパーミッションに限定されます。

一方、MySQLは、異なる権限でのユーザー管理をサポートし、セキュアシェル(SSH)を使用するなど、多くのセキュリティ強化性能を備えています。

セットアップの容易さ

MySQLは、サーバー設定、ユーザー管理、バックアップなど、多くの設定が必要です。一方、SQLiteはインストールが簡単で、実行するための設定も必要ありません。

SQLiteとMySQLの比較─長所と短所

MySQLの長所

  • 習得が容易
  • ほぼすべてのOSに対応
  • C++、PHP、Java、Perlなど、多くの言語で動作
  • 複数のユーザー環境をサポート
  • 高いパフォーマンス

MySQLの短所

  • データが壊れることがある(ただし致命的ではない)
  • デバッグツールに改良が必要
  • 大量のメモリを必要とする

SQLiteの長所

  • サーバーの性能とメモリ要件が低い
  • エネルギー消費量が削減できる
  • 自己充足的でポータブル
  • すべてのPHPにデフォルトで含まれている

SQLiteの短所

  • 複数ユーザー環境やXML形式をサポートしない
  • 一度に一つの接続しか扱えない
  • データベースサイズが大きくなるとパフォーマンスが低下する
  • クライアントからデータベースへの問い合わせができない

SQLiteとMySQL─WordPressとの相性

WordPressはPHPで書かれた人気のコンテンツ管理プラットフォーム(CMS)で、データベースを使用してユーザーデータ、投稿、設定、コンテンツなどすべてのウェブサイト情報を保存しています。

WordPressのデフォルトのDBMSはMySQLで、ほとんどのWordPressサイトでは事実上デフォルトの選択肢となっています。MySQLは、簡単に拡張でき、セキュリティも高いため、大規模なプロジェクトに適しています。一方で、SQLiteは接続数が少ない小規模なプロジェクト、特にMySQLデータベースの複雑な設定を省く必要がある場合に有用です。

SQLiteをWordPressで動作させることは可能ですが、簡単ではありません。WordPressのコアチームは、WordPressの正式SQLiteサポートについての議論を始めています。この機能の実装には時間がかかるかもしれませんが、WordPressのインストール時にデータベースの種類を選択できるようになれば、非常に便利です。

また、より大きなMySQLの系統であるMariaDBもあります。MariaDBは、パフォーマンスの向上、機敏なアップデート、優れたライセンスを特徴としています。一般的に両者は似ていますが、MariaDBが望ましいケースも当然あります。MariaDBとMySQLの比較についてはこちらをご覧ください。

まとめ

データベースは、ほとんどのアプリケーションで必要不可欠です。データベースには様々なライセンス形態がありますが、オープンソースのデータベース管理システムは、他のプロプライエタリなソリューションに対する優れた代替手段となります。

SQLiteとMySQLを比較しましたが、どちらにも便利な機能と固有の用途があります。SQLiteは軽量でポータブルなので、IoTやトラフィックの少ないウェブサイトなどの小規模な利用に適しています。一方、MySQLは広大なコミュニティ基盤を持ち、スケーラブルなアプリケーションに向いています。

実際にどれを選ぶかは、プロジェクトの要件次第です。加えて、堅牢なホスティングソリューションの選択も忘れてはなりません。この機会にKinstaのデータベースホスティングをお試しください。

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.