インフラ

MariaDB/MySQL/PostgreSQL比較:最適なRDBは?ベンチマーク付選択フローチャート

更新日

MariaDBとMySQLとPostgreSQL、どれを選べば良いか

それぞれのDBの良い点をリストして、結論としてどのDBを使えば良いのか分からないという記事はよく見かけると思います。
ここでは、貴方にどのRDB(Relational Database)が良いか、結論として得られるフローチャートを提供します。
なお、ここではあくまでこの3つのRDBで悩んでいる場合のみ想定し、それ以外のNO SQL系DB等は検討対象に入れていないものとします。

RDB選択フローチャート

問1 WordPressを運用する
はい => MariaDB
いいえ => 問2

問2 機能要件として、モバイルアプリも開発したい(データは構造化し切れないので大量のJSONが適切な部分もある)、 GIS(地理情報システム)の要件も入ってくる、という要件がある
はい => PostgreSQL
いいえ => MariaDB

フローチャートの流れの背景説明

MySQLよりMariaDBを選ぶ理由

– MySQLはOracle配下に入った事に対する懸念等で、OSSのLinuxディストリビューションの多くはMariaDBの方を採用している
– MySQLの元開発者がMariaDBを開発した&Oracleは内部にOracleという商品RDBもあるという事もあって、結果MySQLを全力で機能拡張させるの難しい立場。という事もあり現在MariaDBの方がMySQLより高機能になっている
– 2020/05時点、ベンチマークをとってみた所、MariaDBの方がデフォルト設定でも、最適化された環境でもより良いパフォーマンスを発揮した
なので、基本的にMariaDBかMySQLかで悩んだ場合は、その答えはMariaDBを選ぶで問題ないです。


MariaDBを選ぶ理由

– WordPressはMariaDBとMySQLしかサポートしない(=PostgreSQLは正式サポート外)
WordPressはWebサイトでのシェアが35%を超え、WordPressだけでシステムを作る事はなくても、WP対応出来る基盤の保持は必要になる為
– MariaDB(MySQL)はDB管理ツールとしてPostgreSQLより優れたツールがある(WorkBenchA5:SQL Mk-2等)。
– MySQL経験者の方がPostgreSQLより多く、MariaDBはMySQLと互換できる部分が多い為、経験をより活かしやすい
– 2020/05時点の最新版を使ったベンチマーク結果ではMariaDBの方がsysbenchによるベンチマークでデフォルト設定でも、最適化された環境でもより良いパフォーマンスを発揮してる
– WordPressの為にMariaDBを運用するのなら、PostgreSQLと両方を維持するのは人的・サーバー的維持コストが上がってしまう


PostgreSQLを選ぶ理由

– PostgreSQLはJSON型はNative Indexをサポートしている為、中途半端なVirtual Columnという仕組みでIndexを模してるMariaDB(MySQL)とは、JSON型で速度が必要になった場合速度が断然違う(速い)
– REST APIを提供するPostgREST、GraphQL APIを提供するGraphileといったものがあり、JSON利用が簡単&性能が出る=モバイルアプリ&Single Page Application開発がより少ない負担で出来る
PostGISによるGIS機能のサポートが充実
– MariaDBより機能が多い
– データのエラー判定がMariaDBより厳格で、想定外の値処理による不正な値処理の正常扱い通過が起きにくい

ベンチマークによる比較

最新版のデフォルト設定で比較した場合

Linodeの1CPU/1GB RAM/SSDのVPS1台で60秒間8スレッドでsysbenchによるベンチマークを実行した結果。

このベンチマーク結果だと
mariadb(ver10.4.12) > postgresql(ver12.2) > mysql(ver8.0.20)
となっている事が分かります。

2020/05時点のそれぞれのDBの最新安定板&デフォルト設定での比較になります。

項目MariaDB
10.4.12
MySQL
8.0.20
PostgreSQL
12.2
1秒あたり処理数714847575317
1秒あたりTransaction357238265
合計実行数429040285516319284
読込実行回数300328199864223552
書込実行回数858085710163776
他処理実行回数429042855131956
エラー回数0038

AWSのRDSで最適化設定されてる状態で比較した場合

AWSのManaged DBであるRDSで60秒間8スレッドでsysbenchによるベンチマークを実行した結果。
Managed DBである為、そこは秘伝のタレですが、デフォルトに比べ最適化設定が相当される状態と想定できる。
実行環境はクライアント側とサーバー側を分け、1CPU/1GB/SSDのEC2と1CPU/1GBのRDS使用。

このベンチマーク結果だと
mariadb(ver10.4.8) > mysql(ver8.0.17) > postgresql(ver12.2)
となっている事が分かります。

なお、AWSのRDSとして利用出来るものとしては最新版を使っていますが、各DB公式の最新バージョンとは微妙に差がある事にはご注意下さい(マイナーバージョンがちょっと古かったりする)。

項目MariaDB
10.4.8
MySQL
8.0.17
PostgreSQL
12.2
1秒あたり処理数754067275732
1秒あたりTransaction377336286
合計実行数452396403757344111
読込実行回数316680282632240926
書込実行回数904778075068750
他処理実行回数452394037534435
エラー回数1134

両方の事例から考えるに

機能面がDBの選択ではまず第一要素になりますが、そこに選択決定要素がない場合には、パフォーマンスが良いMariaDBは採用候補として上位にくる理由が生まれます。

世の中の利用の実情は?

2020/05時点の求人数比較です。

Indeed日本

MySQL10308
PostgreSQL6173
MariaDB336

 
Indeed米国

MySQL10110
PostgreSQL4418
MariaDB494

 
green-japan

MySQL800企業
PostgreSQL352企業
MariaDB57企業

– 性能が採用を決めるものではない
– MariaDBは後発で先にMySQLを使っている所は切り替える事にその分コストがかかる
とした上で、性能とパフォーマンスでMariaDBが上回っているのに、まだMySQLの方が圧倒的に数は多いですね。
性能もあるけど、既にMySQLが存在する企業では、乗り換えるインセンティヴが足りないか。
加えて同じようなものとしてとらえられていて(その為比較的MySQLからMariaDBへの乗換は容易ですが)、機能とパフォーマンス差がきちんと認知されてない面もあると思われます。

PostgreSQLは徐々に比率が高まっている傾向は見えますが、MySQLの大体1/2位のシェアになっています。
とはいえ、マイナーという割合ではなく、案件によってはいつ巡り合ってもおかしくない割合があります。

関連記事

  1. MariaDBのインストール・設定方法
  2. Mysqlのインストール・設定方法
  3. PostgreSQLのインストール・設定方法