データとは本来、さまざまな事実や観察結果の集積に過ぎません。とは言え、世界がインターネットを介しつながるにつれ、開発者の間では、データの管理は単なる情報の追跡システムを超えた存在である、という事実が自明のものに。

そして今日、多くの企業が潜在顧客の分析、リースの有効活用、リスクの低減などの目的でデータ活用に奔走しています。

世界中でデータ消費量が増加する中で、これをより効率的に管理する堅牢かつ柔軟なデータベースに対する需要は、ますます高まりを見せています。今回の記事では、WordPressで広く使用されている2つの大人気オープンソースデータベースとそれぞれの違いに迫ります。

そもそも、WordPressにとってのデータベースとは何でしょうか。

そんな疑問に答えるところから始めましょう。

WordPressデータベースとは

かなりの数の企業がウェブサイトの運営にWordPressを使用しており、その数はインターネット上の全ウェブサイトのなんと43%にものぼります。さらに、コンテンツ管理システム(CMS)で言えば約60%を占めるほどの普及率です。初心者でも使いやすい選択肢として人気を博しています。WordPressを使う上で、プラグラミングの知識は必須ではありません。しかし、データベースを含むさまざまな要素を理解することは重要です。

WordPressはデータベース無しには機能しません。データベースシステムは、基本的にウェブサイトのバックボーンとなるものです。ブログのコンテンツから、ユーザーによるコメントや変更に至るまで、すべてを確実に保存、追跡するのに欠かせません。さらに、ウェブサイトの読み込みや実行の性能を左右します。

データベースには柔軟性が求められ、コストが低くスケーラブルであれば理想的です。WordPress内でのデータ保管、管理には、さまざまなオープンソースデータベースが利用できます。それでは、PostgreSQLとMySQLの違いを見ていきましょう。

PostgreSQLとは

PostgreSQLのロゴ─黒と白で輪郭を描いた青い象の頭とテキスト
PostgreSQLのロゴ(画像出典:Uberconf

PostgreSQLは、オープンソースのオブジェクトリレーショナルデータベース管理システムです。SQLに完全準拠しており、豊富な機能を持ちます。また拡張性もあり、企業向けツールが必要とされる現場で力を発揮します。特に効率性を重視して設計されており、あらゆるソフトウェアに統合することができます。

PostgreSQLはオブジェクト指向です。データ型を拡張(新しい型を追加)することも可能で、ほとんど全てのデータベースをサポートしています。以下に続く各セクションでは、その歴史、特徴、使用例について詳しく見ていきましょう。

歴史

40年前、Ingresプロジェクトチームのリーダーであった若きパイオニアMichael Stonebraker氏が、Ingresの独自のバージョン開発のためにカリフォルニア大学バークレー校を去ることを決断。しかしその後、同校に舞い戻り、当時他のデータベースが抱えていた問題に対処するかたちでポストIngresプロジェクトを開始。

このプロジェクトが、現在のPostgreSQLとなっています。テーブル間の一貫した関係を維持するルールや、サーバー間でのデータの複製など、複数の「オブジェクトリレーショナル」データ型をサポートする機能が搭載されています。PostgreSQLの初版リリースは1997年1月29日のこと。バージョン6.0がリリースされました。それ以来、開発者、サポート企業、さらにはボランティアが、そのフリーかつオープンなライセンスのもとでデータベースソフトウェアの保守を続けています。

主な機能

PostgreSQLは、データベース管理システムとして多くの機能を誇ります。堅牢な機能、高い信頼性、パフォーマンス、柔軟性、レプリケーションの容易さなどで高い評価を得ています。

続いては、PostgreSQLがあらゆる事業で活用されている理由を見ていきましょう。

高い信頼性

PostgreSQLは、外部キー、ストアドプロシージャ、ジョイン、ビューを複数の言語でサポートしています。また、様々なデータ型があり、画像、音声、動画などの大きなオブジェクトの保存にも対応しています。オープンソースであるため、定期的にバグを発見し、ソフトウェアを改善することによって、比類のないメンテナンスシステムが実現しています。

また、ログ先行書き込みを背景とするフォールトトレラント性能を誇り、オンラインバックアップやポイントインタイムリカバリにも対応可能。過去の物理バックアップデータベースをインストールすることで、WALデータが網羅するいかなる時間のインスタントも復元できます。

さらに、上で触れた「物理バックアップ」はデータベースの状態を示したスナップショットである必要はなく、過去に作成されたものであれば、その特定の時間のWALログを利用することで内部の不整合が解消されます。

柔軟性

PostgreSQLはオープンソースであるため、クロスプラットフォームで自由にコードを変更することが可能です。さらに、同じ行の同時編集のみをブロックして、複数ユーザーによるリアルタイムでの作業も行えます。

拡張性

拡張性とは、ソフトウェア工学の原則で言えば、将来の成長に備えること。PostgreSQLの操作はカタログ駆動型です。つまり、情報がデータベース、カラム、テーブルなどに格納されるため、高い拡張性が実現しています。式の実行時コンパイル(JIT)により、データベースの再コンパイルやデータ型の定義なしに、あらゆる種類のプログラミング言語を使ってコードを記述することができます。このように、多種多様な操作を柔軟に実行できるため、新しいストレージ構造やアプリケーションを素早く実施する上で強さを発揮します。

レプリケーション

PostgreSQLには同期レプリケーションが組み込まれており、プライマリノードは、複製ノードがそのトランザクションログにデータを書き込むまで、書き込みごとに待機を行います。トランザクションの耐久性は、同期性に関係なく、データベース、セッション、ユーザーごとに指定することができます。トランザクションが同期スタンバイに到達しているかどうか確認する必要がないため(特に、これを必要としないフローであれば)トランザクションの高速化が図れます。

使用例

PostgreSQLは、世界のいたるところで活躍しています。今最も使われているデータベースのトップ5に名を連ね、MySQLのすぐ背後にまで迫る勢いです。Bloomberg、Goldman Sachs、Nokiaのような大企業がバックエンドでPostgreSQLを実行しています。

PostgreSQLは様々な業界で使用することができ、1つの分野に限定されるものではありません。以下は、PostgreSQLが現在使用されている例のほんの一部です。

  • 政府系のGIS(地理情報システム)データ:PostgreSQLには「PostGIS」という強力な拡張機能があります。これには、点、線文字列のような幾何学的形状の処理を支援する関数が数多くあり、ディスクとメモリのフットプリント削減を考え最適化されているので、クエリのパフォーマンス向上が期待できます。電力、緊急サービス、および水道といったインフラストラクチャサービスは、主にGISに依存しており、多くの場合、厳しい条件下で人員の位置を特定し、正確な目的地に誘導するため、政府にとって便利な存在となっています。
  • 製造業:多くの製造業で、高効率かつ多くのデータストレージ設備が必要とされます。PostgreSQLは、サプライチェーンのパフォーマンスとストレージを最適化するのに適したデータベースです。ACID準拠で、自動フェイルオーバー、完全な冗長性、ダウンタイムがほとんどないアップグレードを構成できます。また、Oracleの新しいライセンスポリシーにより(中小企業によって、Oracle利用コストが見過ごせないものとなったためか)PostgreSQLが好まれる傾向にあります。
  • ウェブ技術:PostgreSQLは単なるリレーショナルデータベースではなく、NoSQLスタイルのデータストアとしても機能します。リレーショナルな世界とドキュメント指向の世界の両方を1つの製品で扱うことができます。Django(Python)、Hibernate(Java)、Ruby on Rails、PHPなど、多くのフレームワークで機能します。そのレプリケーション機能により、ウェブサイトを簡単にスケールアウトして、必要なだけデータベースサーバーを組み込むことができます。
  • 科学的データ:研究および科学的プロジェクトでは、何テラバイトものデータが生成されることがあり、これを実用的な方法で処理する必要があります。PostgreSQLは優れた分析機能、強力なSQLエンジンを誇り、大量のデータを処理しても問題ありません。また、PostgreSQLは簡単に拡張することができます。MatlabとRを統合して、いくつかの数学的関数や集計関数を実行することができます。

MySQLとは

MySQLのロゴ─傾いた青いイルカ全身とテキスト
MySQLのロゴ(画像出典:Mecdata)

MySQLは、シンプルなリレーショナルデータベースシステムです。非常に効率的でユーザーフレンドリーであるため、最も普及率の高い技術の1つとなっています。SQLを使用することで、いくつかの構造化クエリ言語(Structured Query Language)の概念を素早く把握し、強力なデータストレージシステムを構築することができます。様々なプロプライエタリライセンスの下でも利用できますが、無料で利用可能なオープンソースです。

このセクションでは、その歴史、主な機能、および使用例について説明します。それでは、ご覧ください。

歴史

MySQL は、1995 年にMichael Widenius氏、David Axmark氏、Allan Larsson氏率いるスウェーデンの会社MySQL ABにより開発されました。その後、サン・マイクロシステムズがMySQL ABを買収しています。

MySQLの目的は、企業やホームユーザーに効率的かつ信頼性の高いデータ管理の術を提供すること。2000年までにプラットフォームのアルファ版とベータ版がリリースされ、その大部分は著名なプラットフォームと互換性を持っていました。

同じ頃、MySQLはオープンソースに移行。これにより、サードパーティの開発者がシステムに大きな変更を加えることができるようになりました。オープンソース化は収益の低下を意味したものの、MySQLが人気を博し始めると、最終的にその懸念は払拭されました。

2001年末には、200万件のアクティブインストール数を達成。これは、スロベニアの人口に匹敵する数字です。2002年初頭、MySQL はビジネスを拡大し、米国に本社を開設しました。このとき、すでに300万人のユーザーと650万ドルの売上を記録しており、その後も人気は高まる一方です。

主な機能

MySQLサーバーは、マルチスレッド、マルチタスクであり、高負荷のプロダクションシステムで動作するように設計されています。トランザクションと非トランザクションのエンジンを備え、インストールが最も簡単なデータベースシステムの1つです。MySQLは使いやすく、信頼性が高く、高速であるため、高い評価を得ています。

MySQLの変遷を理解した上で、その主な機能について説明します。

使い勝手の良さ

MySQLは、その使いやすさで人気を博しています。トリガー、ストアドプロシージャなど、いくつかの機能が保証されています。また、クラッシュに備えたバックアッププログラム、管理クライアントであるmysqladmin、管理用のGUI(MySQL workbench)など、さまざまなユーティリティも含まれています。初心者の方にもわかりやすいGUIで幅広いオプションがあり、現在世界で使用されているデータベースのトップ5のひとつに数えられています。

高い柔軟性

MySQL は、大規模なプロジェクト向けであり、効果的かつ安全なトランザクションを可能にします。また、動的な環境でも動作する柔軟性を備えています。オープンソースであるため、コードは自由に利用でき、好みに応じて変更することができます。

信頼性とセキュリティ

PostgreSQLと同様、MySQLもACIDモデルを採用しています。したがって、トランザクション実行中の心配は不要です。ポイントインタイムリカバリやオートコミット機能により、データの保護が保証されています。

システムがクラッシュした場合であっても、最後のチェックポイントに戻るため、データが失われることはありません。さらに、オープンソースであるため、大規模な開発者コミュニティが存在し、システムの正常な動作の確認や、フォーラムでのサポート拡大、さまざまなバグの修正が盛んに行われています。

さらに、外部キー制約のサポートによりデータの整合性を確保。テーブル間のデータの不整合を回避することができます。パスワードシステムを採用しているため、データベースへのアクセス前にホストに基づきパスワードが検証されます。このパスワードはサーバーとの接続時に暗号化される仕様です。

高いパフォーマンス

MySQLは、その優れたストレージエンジンアーキテクチャにより、非常に高速で、信頼性が高く、安価です。つまり、ソフトウェアの重要な機能を失うことなく、高いパフォーマンスを実現しています。キャッシュメモリを搭載しているため、素早く読み込むことが可能です。

MySQLは、インデックス圧縮を備えたB-treeディスクテーブル、最適化入れ子ループ結合、スレッドベースのメモリ割り当てなどの機能を確保することによって、長期にわたってその性能を引き上げてきました。また、ストレージエンジンの行レベルロックと持続的読み込みにより、マルチユーザー並行処理におけるパフォーマンスがさらに向上しています。

スケーラブル

MySQLはフリーでオープンソースであることに加え、多くのプログラム言語に対応しています。MySQLコネクタ/NETを用いた、開発者による自分のデータとデータベースのリンクも可能です。Connector/Jインターフェースもあり、JDBCアソシエーションを使用するJavaクライアントプログラムもサポート。加えて、CまたはC++、あるいはCバインディングの利用できるあらゆる言語で書かれたクライアント向けに、Cで書かれたクライアントライブラリが用意されています。

C、C++、Eiffel、Java、Perl、PHP、Python、Ruby、Tcl用のAPIも利用可能です。また、最も好まれるクロスプラットフォームデータベースシステムの1つであり、Linux、Windows、Solarixなどで使用することができます。このように、ほとんどすべてのソフトウェアとオペレーティングシステムに適用でき、高い拡張性を持ちます。

オープンソースライセンス

MySQLは、オープンソースライセンスの下で利用できます。これにより、コードを自由に使用し、他のドメインと互換性を持たせるために手を加えることが可能です。

オープンソースであるため、開発者によるサポートが充実しており、バグやセキュリティの問題が素早く修正される傾向にあります。MySQL には、ユーザーグループ、フォーラム、サポートがあり、データベースに関する知識の獲得や、問題への素早い対処に有用です。

使用例

MySQLは、ほとんどのサーバーがMySQLに依存しているため、ウェブアプリケーションに有用であると言えます。WordPressデータベースとして使用される以外にも、Joomla、TYPO3、Drupalなど、多くのシステムがMySQLを主要なデータベースとして採用しています。

MySQLが信頼性の高い効率的なデータベースシステムであることを証明する、いくつかの例を紹介します。

  • OLTPトランザクション:トランザクションにはスピードと正確さが要求されます。MYSQLは、効率的かつ容易に毎秒1,000回のクエリにスケールアップすることが可能です。トランザクションには、ACID(Atomicity, Consistency, Isolation, and Durability)の確保が必要です。MySQLもACID特性に従い、重要なトランザクションを安全に行うことができます。トランザクション中にシステムに障害が発生した場合、チェックポイントにロールバックします。
  • LAMPオープンソーススタック:MySQLは、LAMPオープンソースソフトウェアスタック(LAMPは「Linux、Apache、MySQL、PHP/Python/Perl」の略)で動作する多数のアプリケーションに不可欠なものです。LAMPは、ウェブサービスのための普遍的なソリューションスタックで、動的なウェブサイトと高性能なウェブアプリケーションの両方に適したメディアとして広く知られています。
  • ECアプリケーション:MySQLは、ECプラットフォーム運用において最も普及しているトランザクションオプションの1つ。顧客データ、トランザクション、製品カタログを管理するのに有益です。MySQLは、注文データの同期や非製品データの保存のために、ドキュメントやキーバリューストアなどの他の非リレーショナルデータベースとあわせて使用されることがよくあります。

PostgreSQLとMySQLの比較

どちらのデータベースを使うべきかでお悩みでしょうか。こちらのセクションでは、状況に合ったデータベース選びのお手伝いをします。PostgreSQLとMySQLは便利で実用的、かつ人気がありますが、最終的には求められる要件にあった選択肢を選ぶことが重要です。

それでは、2つのデータベースの様々な違いについて、以下の各項目で深く掘り下げていきましょう。

構文

構文について言えば、PostgresqlとMySQLは似ています。例えば以下は、両者のselectクエリがどのようなものかを示したものです。

SELECT * FROM STUDENTS;

しかし、MySQLは「LIMIT」や「ALL」のようないくつかのサブクエリをサポートしていません。また、「INTERSECT」や「OUTER JOIN」のような標準的なSQL節もサポートしていません。

MySQLは、上記のサブクエリをすべてサポートしているPostgreSQLほど、完全にSQLに準拠しているわけではありません。このようなサブクエリを頻繁に使用する必要があるのであれば、PostgreSQLの方が便利かもしれません。

サポートする言語

PostgreSQLとMySQLは、多くの同じ言語をサポートしていますが、いくつかの違いがあります。

PostgreSQLはより広い範囲のプログラミング言語をサポートしています。

  • C/ C++
  • Delphi
  • Erlang
  • Go
  • Java
  • Javascript
  • JSON(バージョン 9.2以降)
  • Lisp
  • .NET
  • Python
  • R
  • Tcl
  • その他

続いて、MySQLがサポートしている言語の一覧です。

  • C/C++
  • Delphi
  • Erlang
  • Go
  • Java
  • Lisp
  • Node.js
  • Perl
  • PHP
  • R

スピード

データベース選定の際に、スピードは不可欠な要素です。高速なデータベースは、ウェブサイトの動作を高速化するだけでなく、未使用のデータを削除することで、サーバーの負担を軽減することができます。

PostgreSQLとMySQLはどちらも、DBMSソリューションの中で高速な部類に入ります。しかし、このカテゴリで明確な勝者はいません。構成、テスト、ハードウェア次第で、どちらのデータベースも優れたベンチマークを記録し得ます。同時実行性で優位に立つデータベースもあれば、シングルコアでメモリが少ないマシンでは、もう一方のデータベースが有利に働くかもしれません。

結局のところ、どのように使用するかということになります。MySQLは一般的に、並行処理を犠牲にして読み込みに限定したコマンド実行時に高速であることが知られていますが、PostgreSQLは読み書き操作、膨大な量のデータセット、複雑なクエリで優れた性能を発揮します。

アーキテクチャ

MySQLは純粋なリレーショナルデータベースであるのに対し、PostgreSQLはオブジェクトリレーショナルデータベースです。PostgreSQLのデータ型はより洗練されたものであり、オブジェクトにプロパティを継承させることができます。その反面、PostgreSQLで作業するのはより複雑になります。PostgreSQLは単一の、ACIDに準拠したストレージエンジンを搭載しています。MySQLは、デフォルトのストレージエンジンであるInnoDBとは別に、15種類のストレージエンジンをサポートしています。膨大な数のストレージエンジンがあるため、用途に合わせてすぐに活用することができます。

PostgreSQLでは、クライアント接続が確立されるたびに、メモリ割り当てによって新しいシステムプロセスが生成されます。多くのクライアント接続を伴うシステムでは多くのメモリが必要になります。一方、MySQLはシングルプロセスで、すべての接続に対して単一のスレッドが利用されます。このため、MySQLは、企業規模ではないアプリケーションに向いています。

パフォーマンス

PostgreSQLは、標準に準拠し、機能が豊富で、拡張可能です。以前は、PostgreSQLの性能は互角でした。読み込みは通常MySQLより遅く、大量のデータをより効率的に書き込むことが可能、という性能です。PostgreSQLはMySQLよりも並行処理を得意としていました。

とは言え、両者の性能の差は、ここ数年で著しく縮まっています。MySQLは、旧型MyISAMエンジンを使っていれば、今でもデータの読み込みはかなり速いです。また、重いデータの書き込みに関しても、PostgreSQLに追いつくよう最適化されています。

ほとんどの一般的なアプリケーションにおいて、パフォーマンスは決め手にならないはずです。PostgreSQLとMySQLは、ほぼ互角だと言えます。

レプリケーションとクラスタリング

レプリケーションを利用することで、データベースからその複製データベースにデータを複製することができます。これにより、すべてのユーザーが同じレベルの情報を保持できます。レプリケーションはまた、フォールトトレランス、スケーラビリティ、自動バックアップだけでなく、プライマリクラスタに影響を与えずに長いクエリを実行する性能など、様々なメリットをもたらします。

MySQLとPostgreSQLの両方がレプリケーションをサポートしています。PostgreSQLは同期レプリケーションを提供しており、2つのデータベースを同時に実行し、プライマリデータベースを複製データベースと同期させることができます。PostgreSQLでは、同期レプリケーションとカスケードレプリケーションを実施可能です。しかし、MySQLでは、レプリケーションは一方向の非同期型です。つまり、1つのデータベースサーバーがプライマリとして機能し、他のサーバーは複製となります。

MySQLとPostgreSQLはどちらもクラスタリングをサポートしています。クラスタリングは、共有ストレージを利用して、環境内の各ノードに等しいデータセットを複製するものです。これにより、環境内のさまざまなノードにデータを複製することで生まれる冗長性によって、データベースが障害に耐えられるようになります。

データおよびテーブル構造

JSONのサポートは、MySQLが搭載するNoSQLの主要な機能の1つです。一方、PostgreSQLは、ユーザー定義型、配列、hstore、XMLをサポートしています。多くのデータ型を操作できるようになったことによる主なメリットは、機能の向上です。例えば、データ型として配列を受け入れることで、PostgreSQLはその配列と互換性のあるホスト関数も扱えます。

しかし、データ格納に別の形式を利用できる利点はあるものの、そのようなデータ形式の実行は─長年のベンチマークに従っていないことを考えると─より複雑になる可能性があります。したがって、データベースと同時に使用されるコンポーネントは、必ずしもPostgreSQLのフォーマットに準拠するとは限りません。

MySQLは、ノーチェック制約のような機能をすべてサポートしているわけではないので、SQL準拠という点では部分的なものでしかありません。とはいえ、多くの拡張機能があります。

対照的に、PostgreSQLはMySQLよりもSQLに準拠しており、主要なSQL機能のほとんど(正確には179の必須機能のうち160の機能)をサポートしています。

拡張性

PostgreSQLは、MySQLにはない様々な高度なデータ型をサポートしているため、非常に拡張性の高いデータベースであると考えられています。これには、ネットワークアドレス型、ネイティブUUID、幾何学/GIS、インデックス対応JSON、タイムゾーンを考慮したタイムスタンプなどが含まれます。PostgreSQLでは、他にも、演算子、データ型、インデックス型も利用できるので、明らかな優位性が見られます。

このような理由で、アプリケーションで非構造化データやユニークなデータ型が必要であれば、PostgreSQLが優れた選択肢になるかもしれません。しかし、基本的な数値や文字データ型を扱うだけであれば、どちらのデータベースも問題なく機能するはずです。

インデックス

データベースのパフォーマンス向上に便利なのがインデックスです。インデックスを使用すると、大きなデータテーブルを扱う際にSQLクエリを高速化することができます。インデックスがなければ、クエリは遅くなり、DBMSにとって大きな負担となります。

PostgreSQLとMySQLの両方に、インデックスがあります。PostgreSQLのインデックスタイプには以下のものがあります。

  • テーブルの一部分の情報のみを配置する部分インデックス
  • B-treeインデックスとHashインデックス
  • カラムの値の代わりに表現関数からインデックスを生成するエクスプレッションインデックス

一方、MySQLでは、以下のようなインデックスが用意されています。

  • 空間データ型に見られるインデックスなど、R-treeに格納されるインデックス
  • PRIMARY KEY、INDEX、FULLTEXT、UNIQUEなどのB-treeに格納されるインデックス
  • FULLTEXTインデックス使用の際の転置とHashインデックス

セキュリティ

PostgreSQLとMySQLの両方がグループとユーザー管理をサポートし、様々な役割にSQL権限を付与することができます。MySQLはユーザー認証にネイティブなウィンドウサービス、PAM、LDAPをサポートし、PostgreSQLはIPベースのクライアント認証とKerberosとPAMを使ったフィルタリングをサポートしています。2つのデータベースは、セキュリティの点で拮抗していると言えるでしょう。

サポートとコミュニティ

PostgreSQLとMySQLの両方に、サポートのように気軽に利用できるコミュニティがあります。

PostgreSQLは、ボランティアで構成される大規模なコミュニティを誇ります。メルマガやIRCを通じ無料でアドバイスを提供しています。その上、サードパーティプロバイダを通じて有償サポートを購入することもできます。また、市販されている様々なPostgreSQLの書籍やマニュアルを参照することで、トラブルシューティングを行うことも可能です。

MySQLにも大規模な有志コミュニティがあり、無料で相談することができます(Percona、MySQLのウェブサイト利用)。Oracleは、無料のコミュニティサポートに加えて、すべての製品の商用バージョンで24時間365日の有償サポートを提供しています。PostgreSQLと同様、トラブルシューティングには、無料のMySQLガイド、書籍等を利用できるはずです。

要約すると、PostgreSQLは、セットアップと使用により多くの技術的な知識が必要となるため、少し難しいかもしれません。また、PostgreSQLに精通する人の数は、MySQLのそれよりも少なくなっています。そのため、ユーザーサポートや管理のしやすさという点では、MySQLの方が若干優れていると言えるかもしれません。

PostgreSQLとMySQLの比較と代替品

もちろん、MySQLとPostgreSQLだけがデータベースの選択肢ではありませんし、オープンソースデータベースの選択肢も2つだけではありません。PostgreSQLとMySQL以外にも、この2つのデータベースに勝るとも劣らない、他の選択肢をご紹介します。

1.MongoDB

MongoDBのロゴ─直立状態の緑の葉とテキスト
MongoDBのロゴ(画像出典:Kubirds

MongoDBは、フリーで使用でき、ソースが公開されている、ドキュメント指向のクロスプラットフォームなデータベース管理システムです。オプションのスキームを持つJSONライクなドキュメントを活用し効率的に機能するのが特徴です。MongoDBは、あらゆる状況に応用できるインハウス統一クエリインターフェースと、柔軟なドキュメントデータモデルにより、開発とイテレーションの3~5倍高速化を実現してくれます。

MongoDBは、あらゆる業界の基盤として機能します。ミッションクリティカルなアプリケーションの構築も、カスタマーエクスペリエンス向上のプロジェクトでも問題ありません。MongoDBがPostgreSQLMySQLに代わる有力な選択肢になり得る理由は以下の通りです。

  • シャーディング:シャーディングとは、大きなデータセットを多数のデータコレクションに分散する手法。シャードキー (単一または複数のレプリカを持つ主キー) を使って、コレクション内のデータ分布を確認し、シャード間でデータを異なる範囲に分割できる。
  • アドホック・クエリ:クエリを実装する際に異なるリターンを返すスタンドインコマンドであり、使い捨てとして利用可能。MongoDBは正規表現(Regex)、範囲検索、フィールド検索もサポートしている。
  • ファイルストレージ:MongoDBをファイルシステム(GridFSと呼ばれる)として活用可能。GridFSは複数のコンピュータでファイルを保存できるようロードバランシングとデータレプリケーションの機能を搭載。GridFSまたはグリッドファイルシステムはMongoDBドライバで構成されており、LighttpdプラグインとNginxまたはmongofilesユーティリティでアクセスすることができる。

2. MariaDB

MariaDBのロゴ─青色で輪郭を描いた茶色のアシカとテキスト
MariaDBのロゴ(画像出典:Docker Hub

MariaDBは、MySQLリレーショナルデータベース管理システムの商用サポートフォークです。これ専用に構築されたストレージエンジンはプラグイン対応で、以前まで多種多様なデータベースが必要であったワークロードを一手に扱うこともできます。分析、トランザクション、またはハイブリッドなユースケースであっても、数分でMariaDBを導入可能です。

MariaDBは、Nasdaq、Deutsche Bank、DBS Bank、ServiceNow、Verizon、Walgreensなどを顧客に抱え、完全なSQLやACID準拠といった大企業に求められる機能の面で妥協することなく、比類ない運用面での俊敏性を実現しています。

MariaDBの主要な機能は次のとおりです。

  • 仮想列:仮想カラムのサポートは、MariaDBの重要な機能の1つ。データベースレベルでの計算実行に使用できる。複数のアプリが1つのカラムにアクセスする場合、各アプリで個別に計算を記述する必要なし(データベースがそれを代行する)。
  • データベースビュー:ビューは、データベースのパフォーマンスを最適化する上で優れた機能。MariaDBはビューのクエリに際して仮想的な表を利用できる点で、MySQLとは大きく異なる。
  • スレッドプーリング:スレッドプーリングは、パイプラインで複数のデータベース接続を扱うときに、MariaDBの作業を高速化するのに有用。各接続に対して個別のスレッドを開く代わりに、スレッドプーリングにより、スレッドのプールが確保できる。

PostgreSQLとMySQLどちらを選ぶべきか

ここまでの内容をまとめると、2つのデータベースのどちらを選ぶかは、必ずしも簡単ではありません。状況次第となります。

膨大なデータベースと複雑なクエリにスムーズに対応でき、どんなアプリケーションでもエンタープライズ規模に拡張できる─そんな機能が揃ったデータベースを探しているなら、PostgreSQLがおすすめです。

一方、信頼性が高く、高速で、より簡単に管理・設定できる、初心者でも安心のデータベースを探しているのであれば、MySQLがいいかもしれません。

最終的な決断を下す前に、両方を試してみるのも一つの手です。MySQLを試すには無料のローカル開発ツールであるDevKinstaを、PostgreSQLを試すには別のローカル開発ツールまたはサービスをダウンロードして使用することができます。

まとめ

この記事では、PostgreSQLとMySQLの主な違いについて説明しました。スピード、パフォーマンス、構文、拡張性、セキュリティ、サポートとコミュニティ、インデックス、アーキテクチャなどの重要な要素に焦点を当てた内容になっています。事業やプロジェクトにあった選択肢の選定にぜひともご活用ください。

PostgreSQLとMySQLには、どちらも、強みと弱みがあります。総評としては、拮抗しているといったところです。最終的な判断は、その用途においてどんな性能や機能が求められるかに依存するでしょう。

PostgreSQLとMySQLという2つの選択肢があったとき、あなたならプロジェクトにどちらを使用しますか?ご意見をお聞かせください。

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.