VPS

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

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

MariaDB
https://mariadb.org/

MySQL
https://www.mysql.com/jp/

PostgreSQL
https://www.postgresql.org/

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

RDB選択フローチャート

問1 使うWeb Framework/CMS等にDB種別の制約があり、正式サポートがMySQLに限られてる
はい => MySQL
いいえ => 問2

問2 使うWeb Framework/CMS等にDB種別の制約があり、正式サポートがPostgreSQLに限られてる
はい => PostgreSQL
いいえ => 問3

問3 WordPressの運用だけに使う予定
はい => MariaDB
いいえ => 問4

問4 WordPressも使うし、JSON型を使うアプリも運用したい
はい => MySQL
いいえ => 問5

問5 1つのテーブルが絞込/並び替えに使われる項目を多く持つ(64項目以上行きそう)
はい => PostgreSQL
いいえ => 問6

問6 全文検索機能をRDBで完結させて簡単に実装したい&そこ迄件数が多くない
はい => MariaDB
いいえ => 問7

問7 Djangoの開発に使う or GIS(地理情報システム)の要件も入ってくる
はい => PostgreSQL
いいえ => 問8

問8 JSON型を使う
はい => MySQL
いいえ => MariaDB

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

MariaDBよりMySQLを選ぶ理由

– 使おうと思っているWebフレームワーク/CMSがMySQLの方は正式サポートDBとして挙げているが、MariaDBは対象になっていない場合。互換性があると言っても、正式サポートをうたっていないのなら、MySQLの方が無難となるでしょう。
– JSON型のNativeサポートをMySQLはしていますが、MariaDBはする気がないので、JSON型を考えるのならMySQLを選びましょう


MySQLよりMariaDBを選ぶ理由

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


PostgreSQLよりMariaDBを選ぶ理由

– 1年毎にメジャーアップデートのPostgreSQLに比べメジャーバージョンの維持期間が長いので管理コストを下げれる
– WordPressはMariaDBとMySQLしかサポートしない(=PostgreSQLは正式サポート外)
WordPressはWebサイトでのシェアが40%を超え、WordPressだけでシステムを作る事はなくても、WP対応出来る基盤の保持は必要になる為
– WordPressの為にMariaDBを運用するのなら、PostgreSQLと両方を維持するのは人的・サーバー的維持コストが上がってしまう
– MariaDB(MySQL)はDB管理ツールとしてPostgreSQLより優れたツールがある(WorkBenchA5:SQL Mk-2等)。
– MySQL経験者の方がPostgreSQLより多く、MariaDBはMySQLと互換できる部分が多い為、経験をより活かしやすい
– 2020/05時点の最新版を使ったベンチマーク結果ではMariaDBの方がsysbenchによるベンチマークでデフォルト設定でも、最適化された環境でもより良いパフォーマンスを発揮してる
– Fulltext型がサポートされていて簡単に全文検索が実装出来る(対象項目の全文検索以外の事も同時にしようとすうるとパフォーマンスの問題に結局ぶつかりますが)


MariaDBよりPostgreSQLを選ぶ理由

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


PostgreSQLよりMySQLを選ぶ理由

– 1年毎にメジャーアップデートのPostgreSQLに比べメジャーバージョンの維持期間が長いので管理コストを下げれる
– show databasesやworkbenchといった、DB管理ツールの充実
– WordPressがPostgreSQLで正式サポートされてないから

どのバージョンを使うべきか

基本的に最新版を使いましょう。
MariaDB, MySQL, PostgreSQL、それぞれサポート期間(=パッチが提供される期間)は、リリースされてから5年です。
古いバージョンを使えば、サポート期限が早く切れるという事になってしまいますし、AWSのRDSを使っている場合はサポート期限が切れたらアップグレードを強制的に適用してくるので、自分は良いままで良いやと古い版に居続ける事もできません。

ベンチマークによる比較

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

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秒あたり処理数 7148 4757 5317
1秒あたりTransaction 357 238 265
合計実行数 429040 285516 319284
読込実行回数 300328 199864 223552
書込実行回数 85808 57101 63776
他処理実行回数 42904 28551 31956
エラー回数 0 0 38

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秒あたり処理数 7540 6727 5732
1秒あたりTransaction 377 336 286
合計実行数 452396 403757 344111
読込実行回数 316680 282632 240926
書込実行回数 90477 80750 68750
他処理実行回数 45239 40375 34435
エラー回数 1 1 34

バージョンアップの傾向による比較

MariaDB

両方の事例から考えるに

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

世の中の利用の実情は?

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

Indeed日本

MySQL 10308
PostgreSQL 6173
MariaDB 336

 
Indeed米国

MySQL 10110
PostgreSQL 4418
MariaDB 494

 
green-japan

MySQL 800企業
PostgreSQL 352企業
MariaDB 57企業

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

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

関連記事

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

管理人は実際最近どれを使ってる?

WordPressを走らせるサーバーはMariaDB、それ以外はPostgreSQLという感じで運用してる事が多いです。
その上で、今冷静に考えると、


VPSニュース
2022/10/24 AWS Lightsail[解説]のベンチマークをGeekbenchで取り直しました
2022/8/26 UpCloud[解説]が近い将来Kubernetesサービスの提供開始を発表。このサイトで公開の海外発VPSはk8s対応がこれで標準に
2022/8/16 UpCloud[解説]のベンチマークを全て取得し直して更新しました[更に読む]