MySQL と PostgreSQL の違いはなんですか?
MySQL は、データを行と列を含むテーブルとして保存できるリレーショナルデータベース管理システムです。多くのウェブアプリケーション、動的な Web サイト、組み込みシステムを支える人気のシステムです。PostgreSQL は MySQL よりも多くの機能を提供するオブジェクトリレーショナルデータベース管理システムです。これにより、データ型、スケーラビリティ、同時実行性、およびデータ整合性がより柔軟になります。
PostgreSQL と MySQL にはどのような類似点がありますか?
PostgreSQL と MySQL はどちらもリレーショナルデータベース管理システムです。これらは、共通の列値を介して相互に関連するテーブルにデータを格納します。例を示します。
- ある会社では、顧客データを Customers という名前のテーブルに customer_id、customer_name、customer_address という列名で格納します。
- また、同社では、製品データをProducts という名前のテーブルに product_id、product_name、product_price という列名を付けて保存しています。
- 各顧客が購入した品目を記録するために、会社には Customer_Orders という名前のテーブルがあり、customer_id 列と product_id 列があります。
PostgreSQL と MySQL の類似点は他にもあります。
- どちらも、データを読み取り、編集するためのインターフェイスとして構造化クエリ言語 (SQL) を使用しています
- どちらもオープンソースであり、デベロッパーコミュニティからの強力なサポートを受けています
- どちらにも、データバックアップ、複製、アクセスコントロール機能が組み込まれています
主な相違点: PostgreSQL と MySQL
PostgreSQL と MySQL は概念的には似ていますが、実装する前に考慮すべき相違点はたくさんあります。
ACID 準拠
原子性、一貫性、独立性、永続性 (ACID) は、予期しないエラーが発生してもデータベースが有効な状態を維持できるようにするデータベースプロパティです。例えば、多数の行を更新したのにシステムが途中で失敗した場合は、行を変更しないでください。
MySQL は、InnoDB および NDB クラスターストレージエンジンまたはソフトウェアモジュールで使用した場合にのみ ACID 準拠を実現します。PostgreSQL はすべての設定で完全に ACID に準拠しています。
同時実行制御
マルチバージョン同時実行制御 (MVCC) は、レコードの複製コピーを作成して同じデータを並行して安全に読み取り、更新する高度なデータベース機能です。MVCC を使用すると、データの整合性を損なうことなく、複数のユーザーが同じデータを同時に読み取り、変更できます。
MySQL データベースは MVCC を提供していませんが、PostgreSQL はこの機能をサポートしています。
インデックス
データベースはインデックスを使用してデータをより速く取得します。頻繁にアクセスするデータにインデックスを付けるには、他のデータとは異なる方法でソートして保存するようにデータベース管理システムを構成します。
MySQL は、階層的にインデックス化されたデータを格納する B ツリーと R ツリーのインデックスをサポートしています。PostgreSQL のインデックスタイプには、ツリー、式インデックス、部分インデックス、ハッシュインデックスがあります。スケールに合わせてデータベースのパフォーマンス要件を微調整するためのオプションは他にもあります。
データ型
MySQL は純粋なリレーショナルデータベースです。一方、PostgreSQL はオブジェクトリレーショナルデータベースです。つまり、PostgreSQL では、データをプロパティ付きのオブジェクトとして保存できます。オブジェクトは、Java や.NET などの多くのプログラミング言語で一般的なデータ型です。オブジェクトは、親子関係や継承などのパラダイムをサポートします。
PostgreSQL での作業は、データベースデベロッパーにとってより直感的です。PostgreSQL は、配列や XML などの他のデータ型もサポートしています。
ビュー
ビューは、データベースシステムが複数のテーブルから関連データを引き出すことによって作成するデータサブセットです。
MySQL はビューをサポートしていますが、PostgreSQL には高度なビューオプションが用意されています。例えば、事前にいくつかの値 (特定の期間におけるすべての注文の合計金額など) をあらかじめ計算して、マテリアライズドビューを作成できます。マテリアライズドビューは、複雑なクエリのデータベースパフォーマンスを向上させます。
ストアドプロシージャ
ストアドプロシージャは、事前に記述して保存できる構造化クエリ言語 (SQL) クエリまたはコードステートメントです。同じコードを繰り返し再利用できるため、データベース管理タスクがより効率的になります。
MySQL と PostgreSQL はどちらもストアドプロシージャをサポートしていますが、PostgreSQL では SQL 以外の言語で記述されたストアドプロシージャを呼び出すことができます。
トリガー
トリガーは、データベース管理システムで関連イベントが発生したときに自動的に実行されるストアドプロシージャです。
MySQL データベースでは、SQL の INSERT、 UPDATE、および DELETE ステートメントに AFTER および BEFORE トリガーのみを使用できます。つまり、プロシージャはユーザーがデータを変更する前または後に自動的に実行されます。対照的に、PostgreSQL は INSTEAD OF トリガーをサポートしているため、関数を使用して複雑な SQL ステートメントを実行できます。
PostgreSQL と MySQL のどちらを選択するか
どちらのリレーショナルデータベースもほとんどのユースケースに適しています。ただし、最終決定を下す前に、次の要素を考慮してください。
アプリケーションスコープ
PostgreSQL は、書き込みオペレーションが頻繁でクエリが複雑なエンタープライズレベルのアプリケーションに適しています。
ただし、プロトタイプを作成したり、ユーザー数を減らして内部アプリケーションを作成したり、読み取り回数を増やしてデータ更新を頻繁に行わない情報ストレージエンジンを作成したりする場合は、MySQL プロジェクトを開始できます。
データベース開発経験
MySQL は初心者に適しており、習得に要する時間も短くなります。新しいデータベースプロジェクトをゼロから構築するのにかかる時間が短縮されます。MySQL をスタンドアロン製品としてセットアップすることも、LAMP スタックなどの他のウェブ開発テクノロジーとバンドルすることも簡単です。
一方、PostgreSQL は初心者にとってははるかに難しい場合があります。通常、複雑なインフラストラクチャのセットアップとトラブルシューティングの経験が必要です。
パフォーマンス要件
アプリケーションで頻繁にデータを更新する必要がある場合は、PostgreSQL の方が適しています。ただし、頻繁にデータを読み取る必要がある場合は、MySQL の使用をお勧めします。
書き込みパフォーマンス
MySQL は書き込みロックを使用して、実際の同時実行性を実現します。例えば、あるユーザーがテーブルを編集している場合、別のユーザーがテーブルを変更する前に操作が終了するまで待たなければならない場合があります。
ところが、PostgreSQL には、読み取り/書き込みロックなしのマルチバージョン同時実行制御 (MVCC) サポートが組み込まれています。このように、PostgreSQL データベースは、書き込みオペレーションが頻繁に行われる場合や同時に行われる場合に、パフォーマンスが向上します。
読み取りパフォーマンス
PostgreSQL は、データベースに接続しているすべてのユーザーに対して、大量のメモリ割り当て (約 10 MB) を伴う新しいシステムプロセスを作成します。複数のユーザー向けにスケーリングするには、メモリを大量に消費するリソースが必要です。
一方、MySQL は複数のユーザーに対して 1 つのプロセスを使用します。その結果、MySQL データベースは、主にユーザーにデータを読み込んで表示するアプリケーションでは PostgreSQL よりも優れています。
相違点のまとめ: PostgreSQL と MySQL
カテゴリ |
MySQL |
PostgreSQL |
データベース技術 |
MySQL は純粋なリレーショナルデータベース管理システムです。 |
PostgreSQL はオブジェクトリレーショナルデータベース管理システムです。 |
特徴 |
MySQL は、ビュー、トリガー、プロシージャなどのデータベース機能のサポートが限られています。 |
PostgreSQL は、マテリアライズドビュー、INSTEAD OF トリガー、複数言語のストアドプロシージャなど、最も高度なデータベース機能をサポートしています。 |
データ型 |
MySQL は、数値、文字、日付と時刻、空間、JSON のデータ型をサポートしています。 |
PostgreSQL は、幾何学的、列挙型、ネットワークアドレス、配列、範囲、XML、hstore、および複合型のデータ型に加えて、すべての MySQL データ型をサポートしています。 |
ACID 準拠 |
MySQL は、InnoDB および NDB クラスターストレージエンジンでのみ ACID に準拠しています。 |
PostgreSQL は常に ACID に準拠しています。 |
インデックス |
MySQL は B ツリーと R ツリーのインデックスをサポートしています。 |
PostgreSQL は、式インデックス、部分インデックス、ハッシュインデックスなどの複数のインデックスタイプとツリーをサポートしています。 |
パフォーマンス |
MySQL では、高頻度の読み取りオペレーションのパフォーマンスが向上しました。 |
PostgreSQL では、高頻度の書き込みオペレーションのパフォーマンスが向上しました。 |
初心者サポート |
MySQL は使い始めるのが簡単です。技術者以外のユーザー向けに、幅広いツールセットが用意されています。 |
PostgreSQL は使い始めるのがもっと複雑です。技術者以外のユーザー向けのツールセットが限られています。 |
AWS はお客様の PostgreSQL と MySQL の要件をどのようにサポートできますか?
Amazon Web Services (AWS) では、PostgreSQL と MySQL の要件を満たす複数のサービスを提供しています。
Amazon RDS
Amazon Relational Database Service (Amazon RDS) はマネージドサービスを集めたものであり、クラウド内でリレーショナルデータベースを簡単にセットアップ、運用、およびスケーリングできるようにします。MySQL 用 Amazon Relational Database Service (Amazon RDS) を使用すると、コスト効果が良くサイズ変更可能なハードウェア容量を使用して、スケーラブルな MySQL サーバーを数分でデプロイできます。
同様に、PostgreSQL 用 Amazon Relational Database Service (Amazon RDS) は、クラウド内で PostgreSQL のデプロイを簡単にセットアップ、運用、およびスケーリングできるようにします。また、PostgreSQL ソフトウェアのアップグレード、ストレージ管理、ディザスタリカバリのためのバックアップなど、複雑で時間のかかる管理タスクも処理します。
Amazon RDS を使用することで得られるメリットは他にもあります。
- コスト効率が良く、サイズ変更が可能なハードウェア容量で、スケーラブルな MySQL と PostgreSQL を数分でデプロイ
- 既存のデータベースに関連するコード、アプリケーション、ツールを再利用
- コンピューティング、メモリ、ストレージ容量の使用率などの重要なオペレーションメトリクスを表示
Amazon Aurora
Amazon Aurora は、MySQL と PostgreSQL の完全な互換性を持つ、クラウド用に構築されたリレーショナルデータベース管理システム (RDBMS) です。Aurora は、ハイエンドな商用データベースのスピードと可用性、オープンソースデータベースのシンプルさとコスト効率性を兼ね備えています。
Aurora は、MySQL および PostgreSQL と完全な互換性があるため、既存のアプリケーションやツールを変更せずに実行することができます。Amazon Aurora に移行すると、現在の設定の 3 倍のスループットを体験できます。
Amazon EC2
Amazon Elastic Compute Cloud (Amazon EC2) は、最も広範で奥深いコンピューティングプラットフォームを提供しています。ワークロードのニーズに最適に対応できるように、500 を超えるインスタンスを備え、最新のプロセッサ、ストレージ、ネットワーク、オペレーティングシステム、購入モデルを選択できます。
Amazon EC2 を使用すると、MySQL データベースと PostgreSQL データベースをクラウドで実行できます。このアプローチでは、インフラストラクチャのプロビジョニング、データベースのセットアップ、チューニング、パッチ、バックアップ、スケーリングなどのデータベース管理タスクを処理する必要があります。
今すぐ無料のアカウントを作成して、AWS で PostgreSQL と MySQL を使い始めましょう。