ホームページ  >  記事  >  データベース  >  postgresqlとmysqlの違いは何ですか

postgresqlとmysqlの違いは何ですか

青灯夜游
青灯夜游オリジナル
2022-04-12 14:43:5830810ブラウズ

違い: 1. MySQL はコマンドの実行によってインスタンスを開始しますが、PG はプロセスの実行によって開始します; 2. PG はマテリアライズド ビューをサポートしますが、MySQL はマテリアライズド ビューをサポートしません; 3. MySQL はスケーラビリティをサポートしません。一方、PG はスケーラビリティが高く、4. PG ストアド プロシージャの機能サポートは MySQL よりも優れており、実行プランをローカルにキャッシュする機能があります。

postgresqlとmysqlの違いは何ですか

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

MySQL

MySQL は比較的新しく、1994 年に初めて登場しました。これは、最も人気のあるオープンソース データベースであると主張しています。 MySQL は、LAMP (Linux、Apache、Perl/PHP/Python を含む Web 開発用のソフトウェア パッケージ) の M です。 LAMP スタック上に構築されたほとんどのアプリケーションは、WordPress、Drupal、Zend、phpBB などのよく知られたアプリケーションを含め、MySQL を使用します。

MySQL は当初から、高速な Index Sequential Access Method (ISAM) を使用し、ACID をサポートせず、高速な Web サーバー バックエンドとして設計されました。急速な初期開発の後、MySQL はより多くのストレージ エンジンをサポートし始め、InnoDB エンジンを通じて ACID を実装しました。 MySQL は他のストレージ エンジンもサポートしており、一時テーブル関数 (MEMORY ストレージ エンジンを使用) を提供し、MyISAM エンジンを介して高速読み取りデータベースを実装しています。さらに、他のコア ストレージ エンジンやサードパーティ エンジンもあります。

MySQL には、多くの高品質な無料リファレンス マニュアル、書籍、オンライン ドキュメント、Oracle やサードパーティ ベンダーからのトレーニングやサポートなど、非常に豊富なドキュメントが用意されています。

MySQL では、近年、所有権の変更やいくつかの劇的な出来事が発生しました。元々は MySQL AB によって開発され、2008 年に 10 億ドルで Sun に売却されました。Sun は 2010 年に Oracle に買収されました。 Oracle は、MySQL の複数のバージョン (Standard、Enterprise、Classic、Cluster、Embedded、Community) をサポートしています。無料でダウンロードできるものもあれば、有料のものもあります。そのコア コードは GPL ライセンスに基づいており、GPL ライセンスを使用したくない開発者や製造業者は商用ライセンスを利用できます。

コア MySQL 開発者数名が MySQL フォークをリリースしたため、元の MySQL コードに基づいて選択できるデータベースがさらに多くなりました。オリジナルの MySQL 作成者の 1 人である Michael "Monty" Widenius は、MySQL を Sun に売却したことを後悔しているようで、GPL に基づいてライセンス供与された無料の独自の MySQL フォーク、MariaDB を開発しました。 Drizzle は、有名な MySQL 開発者である Brian Aker によって作成されたブランチであり、特にマルチ CPU、クラウド、ネットワーク アプリケーション、および高い同時実行性向けに最適化されて大幅に書き直されました。

PostgreSQL

PostgreSQL (略して PG) は、世界で最も先進的なオープンソース データベースであると主張しています。 PostgreSQL のファンの中には、PostgreSQL は Oracle に匹敵するものの、高額な価格や横柄な顧客サービスがないと言っている人もいます。歴史は古く、元々は 1985 年にカリフォルニア大学バークレー校で Ingres データベースの後継として開発されました。

PostgreSQL は、完全にコミュニティ主導のオープン ソース プロジェクトで、世界中の 1,000 人以上の貢献者によって維持されています。複数の異なるコミュニティ エディション、商用エディション、エンタープライズ エディションを提供する MySQL とは異なり、完全に機能する単一のバージョンを提供します。 PostgreSQL は自由な BSD/MIT ライセンスに基づいてライセンスされており、著作権表示を提供する限り、組織はコードを使用、コピー、変更、再配布できます。

信頼性は PostgreSQL の最優先事項です。堅固な品質と、高トランザクションのミッションクリティカルなアプリケーションに対する綿密に設計されたサポートで知られています。 PostgreSQL のドキュメントは非常に充実しており、無料のオンライン マニュアルや古いバージョンのアーカイブされたリファレンス マニュアルが多数あります。 PostgreSQL のコミュニティ サポートは、独立ベンダーからの商用サポートと同様に優れています。

データの一貫性と整合性も、PostgreSQL の優先度の高い機能です。 PostgreSQL は ACID 機能を完全にサポートし、データベース アクセスに対する強力なセキュリティ保証を提供し、Kerberos や OpenSSL などのエンタープライズ セキュリティ ツールを最大限に活用します。独自のチェックを定義して、独自のビジネス ルールに基づいてデータ品質を確保できます。

数多くの管理機能の中でも、ポイント イン タイム リカバリ (PITR) は優れた機能であり、ホット バックアップやスナップショットの作成、失敗したリカバリのリカバリなどの機能を提供する、柔軟で高可用性の機能です。 。 能力。ただし、これが PostgreSQL のすべてではなく、このプロジェクトでは、高可用性、負荷分散、レプリケーションなどを実現するために PostgreSQL を管理するためのいくつかの方法も提供されており、特定のニーズに合った機能を使用できます。

postgresql と mysql の違い

#データベースはオブジェクトの名前付きコレクションであり、各データベースは他のデータベースとは別個のエンティティです。各データベースには独自のシステム カタログがありますが、すべてのデータベースは pg_database を共有します。 データ バッファー#データベース接続#認証InnoDB は先行書き込みログを使用します。オンラインおよびオフラインの完全バックアップ、クラッシュおよびトランザクションの回復をサポートします。ホット バックアップをサポートするには、サードパーティ ソフトウェアが必要です。 データ ディレクトリのサブディレクトリに先行書き込みログを維持します。オンラインおよびオフラインの完全バックアップに加え、クラッシュ、ポイントインタイム、トランザクションのリカバリもサポートします。ホットバックアップをサポートできます。 主キー、外部キー、一意制約、および非 null 制約をサポートします。チェック制約は解決されますが、強制されません。 主キー、外部キー、一意、非 null、およびチェック制約をサポートします。 CREATE PROCEDURE および CREATE FUNCTION ステートメントをサポートします。ストアド プロシージャは SQL と C で作成できます。ユーザー定義関数は、SQL、C、および C で作成できます。## pg_hba。 confXML サポート限定された XML サポート。 #データ アクセスおよび管理サーバーAnalyzeテーブルレベルと行レベルのロックをサポートします。 InnoDB ストレージ エンジンは、READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ、および SERIALIZABLE をサポートします。 SET TRANSACTION ISOLATION LEVEL ステートメントを使用して、トランザクション レベルで分離レベルを設定します。 テーブルレベルと行レベルのロックをサポートします。サポートされている ANSI 分離レベルは、Read Committed (デフォルト - クエリの開始時にデータベースのスナップショットを表示できます) とシリアル化 (Repeatable Read と同様 - トランザクションの開始前にコミットされた結果のみ表示できます) です。 SET TRANSACTION ステートメントを使用して、トランザクション レベルで分離レベルを設定します。 SET SESSION を使用してセッション レベルで設定します。
#機能 MySQL PostgreSQL
インスタンス MySQL コマンド (mysqld) を実行してインスタンスを起動します。インスタンスは 1 つ以上のデータベースを管理できます。サーバーは複数の mysqld インスタンスを実行できます。インスタンス マネージャーは、mysqld の個々のインスタンスを監視できます。 ポストマスタープロセス(pg_ctl)を実行してインスタンスを起動します。インスタンスは、クラスターを形成する 1 つ以上のデータベースを管理できます。クラスターは、インストール中に初期化されるディスク上の領域であり、すべてのデータが保存されるディレクトリで構成されます。 initdb を使用して最初のデータベースを作成します。 1 台のマシン上で複数のインスタンスを起動できます。
#データベース データベースは、インスタンス内の他のデータベースとは別のエンティティであるオブジェクトの名前付きコレクションです。 。 MySQL インスタンス内のすべてのデータベースは、同じシステム カタログを共有します。
innodb_buffer_pool_size 構成パラメーターを使用してデータ バッファーを設定します。このパラメータは、InnoDB がテーブル データとインデックスをキャッシュするために使用するメモリ バッファ内のバイト数です。専用データベース サーバーでは、このパラメータはマシンの物理メモリの最大 80% に設定できます。 Shared_buffers キャッシュ。デフォルトでは 64 個のバッファが割り当てられます。デフォルトのブロック サイズは 8K です。バッファ キャッシュは、postgresql.conf ファイルのshared_buffers パラメータを設定することで更新できます。
クライアントは、CONNECT または USE ステートメントを使用してデータベースに接続します。データベース名を指定する必要があり、ユーザー ID とパスワードを指定できます。ロールを使用して、データベース内のユーザーとユーザー グループを管理します。 クライアントは connect ステートメントを使用してデータベースに接続しますが、このときデータベース名を指定する必要があり、ユーザー ID とパスワードも指定できます。ロールを使用して、データベース内のユーザーとユーザー グループを管理します。
MySQL はデータベース レベルで認証を管理します。基本的にはパスワード認証のみ対応しております。 #PostgreSQL は、信頼認証、パスワード認証、Kerberos 認証、ID ベースの認証、LDAP 認証、PAM 認証など、さまざまな認証方法をサポートしています #暗号化
#テーブル レベルでパスワードを指定してデータを暗号化できます。 AES_ENCRYPT 関数と AES_DECRYPT 関数を使用して、列データを暗号化および復号化することもできます。ネットワーク暗号化は SSL 接続経由で実現できます。 列は、pgcrypto ライブラリの関数を使用して暗号化/復号化できます。ネットワーク暗号化は SSL 接続経由で実現できます。 Audit
クエリログを grep できます。 監査用のテーブルで PL/pgSQL トリガーを使用できます。 #バックアップ、リカバリ、ログ記録
制約
ストアド プロシージャとユーザー定義関数
個別のストアド プロシージャはなく、すべて関数を通じて実装されます。ユーザー定義関数は、PL/pgSQL (特殊な手続き型言語)、PL/Tcl、PL/Perl、PL/Python、SQL、および C で作成できます。
トリガー 行前トリガー、行後トリガー、ステートメント トリガー、トリガー ステートメントをサポート手続き型で記述言語の複合文。 行前トリガー、行後トリガー、ステートメント トリガーをサポートしており、トリガー プロセスは C で記述されています。
#システム構成ファイル my.conf Postgresql。 conf
データベース構成 my.conf Postgresql。 conf
クライアント接続ファイル my.conf
#限定された XML サポート。
##テーブルの最適化 —— 未使用の領域を再利用し、断片化を排除しますデータ ファイルの数 #myisamchk -analyze —— クエリ オプティマイザー (MyISAM ストレージ エンジン) によって使用される統計を更新します #mysql —— コマンド ライン ツール
MySQL Administrator —— クライアント GUI ツール

Vacuum ——未使用のスペースを再利用
——使用される統計を更新しますクエリ オプティマイザーpsql ——コマンド ライン ツール
pgAdmin ——クライアント GUI ツール

同時実行制御
#VSPostgreSQLMySQLオープン ソースPostgreSQL は無料のオープンソース システムであり、PostgreSQL ライセンス (無料オープンソース ライセンス) の対象となります。 MySQL は Oracle の製品であり、ユーザーが使用できるいくつかの有料バージョンが提供されています管理PostgreSQL は世界中のユーザーによって開発された製品ですMySQL は、GNU General Public License およびさまざまな独自の契約条件に基づく製品です。パフォーマンスPostgreSQL は、次のような要求を必要とする大規模なアプリケーションに適しています。高い読み取りおよび書き込み速度 MySQL は、主にデータ トランザクション用のデータベースのみを必要とする Web アプリケーションのシステムで使用されます。 ACID に従うPostgreSQL は最初から最後まで ACID の原則に従い、要件が満たされていることを確認しますMySQL は InnoDB および NDB クラスターを使用する場合にのみ使用されますストレージ エンジン ACID 要件にのみ準拠します。 SQL 互換性"ドキュメントによると、PostgreSQL はほとんどの SQL と互換性があります。PostgreSQL は SQL:2011 のほとんどの機能をサポートしています。コアの一貫性のために必要です。179 個の必須関数のうち、PostgreSQL は少なくとも 160 と互換性があります。さらに、サポートされている一連のオプション関数があります。""ドキュメントによると、MySQL は一部のバージョンの一部の SQL と互換性があります。私たちは主な目標の 1 つです。この製品の目的は、速度や信頼性を犠牲にすることなく SQL 標準の要件を満たすよう努力し続けることです。これにより、ユーザーの可用性のほとんどにおいて MySQL サーバーが大幅に向上する場合は、SQL 拡張機能を追加したり、非 SQL 機能をサポートしたりすることができます。 "サポートされているプラ​​ットフォームPostgreSQL は、Linux、Windows (Win2000 SP4 以降)、FreeBSD、OpenBSD、NetBSD、Mac OS X、AIX、IRIX で実行できます。 、Solaris、Tu64。技術大手ヒューレット・パッカード社が開発した HP-UX OS やオープンソースの Unix OS もサポートしています。 MySQL は、Oracle Solaris、Microsoft Windows、Linux Mac OS X 上で実行できます。 MySQL は、オープン ソースの FreeBSD OS のサポートを拡張しますプログラミング言語のサポートPostgreSQL は C で書かれており、さまざまなプログラミング言語をサポートしていますが、最も有名なのは C/ C、Delphi、JavaScript、Java、Python、R、Tcl、Go、Lisp、Erlang、.Net.PostgreSQL は C および C で書かれており、C/C、Erlang、PHP、Lisp、そして、Go、Perl、Java、Delphi、R、Node.js。マテリアライズド ビューPostgreSQL はマテリアライズド ビューをサポートしますMySQL はサポートしませんマテリアライズド ビュー ビューデータ バックアップPostgreSQL はプライマリ レプリケーションとセカンダリ レプリケーションをサポートしており、サードパーティの拡張機能を実装することで他のタイプのレプリケーションも処理できます MySQL はプライマリおよびセカンダリ レプリケーションをサポートします。スタンバイ レプリケーションでは、各ノードがマスターとなり、データを更新する権限を持ちます。スケーラビリティPostgreSQL はスケーラビリティが高く、追加および追加が可能です。データ型、演算子、インデックス型、関数型言語があります。 MySQL はスケーラビリティをサポートしていません。 アクセス方法PostgreSQL はすべての標準をサポートしています。 MySQL はすべての標準をサポートしています。 コミュニティ サポートPostgreSQL には既存の機能の改善を支援するアクティブなコミュニティ サポートがあり、そのクリエイティブ コミッターはデータベースが最新の機能を維持できるように多大な労力を費やしています。最大限のセキュリティを実現し、利用可能な最も高度なデータベースとなります。 MySQL には大規模なフォロワー コミュニティもあります。これらのコミュニティの寄稿者は、特に Oracle に買収された後、主に時折発生する新機能に焦点を当て、既存の機能を維持します。 セキュリティPostgreSQL は、クライアント/サーバー通信を暗号化する接続に対してネイティブ SSL サポートを提供します。 PSQL には行レベルのセキュリティもあります。 MySQL は安全性が高く、複数のセキュリティ機能が含まれています。

MySQL に対する PostgreSQL の利点

  • SQL の標準実装は MySQL よりも完全であり、関数の実装はより厳密です;

  • ストアド プロシージャの関数サポートは MySQL よりも優れており、実行プランをローカルにキャッシュする機能があります。

  • テーブル接続のサポートは比較的優れています。オプティマイザの機能は比較的完全です。多くのインデックス タイプをサポートし、強力で複雑なクエリ機能を備えています。

  • PG のメイン テーブルはヒープ テーブルに格納されますが、MySQL はインデックスを使用します。テーブルを整理するため、MySQL よりも大量のデータをサポートできます。

  • PG のプライマリおよびセカンダリ レプリケーションは物理レプリケーションであり、MySQL のバイナリ ログベースの論理レプリケーションと比較して、データの一貫性の信頼性が高く、レプリケーションのパフォーマンスが高く、ホストのパフォーマンスへの影響が小さくなります。 。

  • MySQL のストレージ エンジン プラグイン メカニズムには、同時実行性に影響を与える複雑なロック メカニズムという問題がありますが、PG は存在しません。

MySQL の PG に対する利点:

  • PG と比較した、ロールバック セグメントに基づく innodb の MVCC メカニズム XID-新旧のデータを一緒に保存する MVCC メカニズムが主流です。新しいデータと古いデータは一緒に保存され、VACUUM を定期的にトリガーする必要があります。これにより、冗長 IO とデータベース オブジェクト ロックのオーバーヘッドが生じ、データベース全体の同時実行能力が低下します。さらに、VACUUM が時間内にクリーンアップされない場合、データ拡張が発生する可能性もあります。

  • MySQL はインデックスを使用してテーブルを編成します。この保存方法は、クエリや削除操作に非常に適しています。主キーのマッチングは可能ですが、テーブル構造には影響しません。設計には制約があります。

  • # MySQL のオプティマイザは比較的単純で、システム テーブル、演算子、およびデータ型の実装は非常に合理化されており、単純なクエリ操作に非常に適しています。

  • MySQL パーティション テーブルの実装は、継承テーブルに基づく PG のパーティション実装よりも優れており、これは主に大きな違いに反映されています。パーティション数が数千、数万に達すると、処理パフォーマンスが低下します。

  • MySQL のストレージ エンジン プラグイン メカニズムにより、アプリケーション シナリオがより広範囲になります。たとえば、innodb がトランザクション処理シナリオに適していることに加えて、myisam は静的データ クエリ シナリオにも適しています。

[関連する推奨事項: mysql ビデオ チュートリアル ]

以上がpostgresqlとmysqlの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。