MariaDB は MySQL をそのまま置き換え可能な互換性を持っていると言われています。
また、標準で使えるストレージエンジンが豊富であることや、MySQL8.0 で追加される予定の Window関数や共通テーブル式(CTE)も MariaDB 10.2 ではすでに実装済みだったりします。
機能としては高い互換性を持っている MariaDB と MySQL ですが、今回はソースコードレベルで見た場合、どれくらい MariaDB と MySQL は類似しているのかを検証してみました。
参考
MariaDB versus MySQL – Compatibility – MariaDB Knowledge Base
MariaDB versus MySQL – Features – MariaDB Knowledge Base
どうやってコードの類似度を調べるか?
コードの類似度を計測するツールというのは無さそうなのでコードのコピペを検出するツールを使って類似度を測定することにしました。C/C++ に対応しているのは以下のツールです。
PMD – Finding copied and pasted code
このツールで MariaDBのソースコードと MySQL のソースコードでコピペ判定されたところは類似しているとします。ざっくりとした指標ですが、以下の計算式を類似度とします。
全てのソースコードをPMDにかけると時間がかなりかかるため、sql ディレクトリ以下のコードを対象としました。また、 MariaDB よりも MySQL に近いとされる Percona Server for MySQL(以下: Percona Server) でも比較のために同じ方法で類似度を出しています。
測定方法が異なれば結果も異なると思います。今回の結果は参考程度に考えてください
MariaDB と MySQL の互換性があるバージョンについて
MySQL の各バージョンと互換性がある MariaDB は以下の通りです。
MySQL | MariaDB | Percona Server |
---|---|---|
5.5 | 5.5 / 10.0 | 5.5 |
5.6 | 10.1 | 5.6 |
5.7 | 10.2 | 5.7 |
各バージョンごとのソースコードの類似度
MySQL 5.5
バージョン | コード行数 | MySQLとの類似行数 | MySQLとの類似率 |
---|---|---|---|
MySQL 5.5 | 407634 | ||
MariaDB 5. 5 | 471317 | 285232 | 60% |
MariaDB 10.0 | 526794 | 215647 | 41% |
Percona 5.5 | 418255 | 364817 | 87% |
MySQL 5.6
バージョン | コード行数 | MySQLとの類似行数 | MySQLとの類似率 |
---|---|---|---|
MySQL 5.6 | 540026 | ||
MariaDB 10.1 | 536353 | 154757 | 29% |
Percona 5.6 | 554877 | 486831 | 89% |
MySQL 5.7
バージョン | コード行数 | MySQLとの類似行数 | MySQLとの類似率 |
---|---|---|---|
MySQL 5.7 | 665928 | ||
MariaDB 10.2 | 565312 | 83467 | 15% |
Percona 5.7 | 680661 | 605623 | 89% |
Percona Server はバージョンが進んでも比較的高い類似率を保っているのに対して、MariaDBはバージョンが進むごとにMySQLとの類似率が下がっていることがわかります。
MariaDB と Percona Server の開発方法の違い
バージョンが進むごとにMariaDBとMySQLは差が広がって行くのに対し、Percona Server はバージョンが進んでも比較的差が広がらないのは開発方法の違いもあると考えられます。
下記の図のように、MariaDBは5.5からMySQLのソースコードからフォークして以降、MySQLのコミットを必要な部分だけ取り込みつつMariaDBの独自の機能を追加しています。
対してPercona Server では、MySQLの変更について全て取り込むようにしており、またPerconaが実装した機能がMySQLで実装された場合、Percona独自のコードは削除するほどMySQLとの互換性を重視しています。
このため、Percona Server は MySQL との互換性を維持した上での機能追加がなされているに対して、MariaDB は大胆な独自機能やMySQLに先行して機能が実装されるというような方向性の違いを生み出せる要因となっています。
MaraDBの先行機能、独自機能
機能名 | MariaDB | MySQL |
---|---|---|
Window関数 | 10.2 | 8.0 |
共通テーブル式 | 10.2 | 8.0 |
外部キーチェック制約 | 10.2 | 未実装 |
PL/SQL | 10.3 | 未実装 |
参考
MariaDB vs. MySQL – Features
MySQL8.0 の共通テーブル式(CTE)を使ってみよう | スマートスタイル TECH BLOG
MariaDB 10.3のPL/SQLを試してみた | スマートスタイル TECH BLOG
まとめ
今回はMySQLとMariaDBのソースコードのざっくりとした類似度から、MySQLと互換性のあるMariaDBとPercona Serverの特徴について考察してみました。
MySQL、MariaDB、Percona Server のどれを選択するかの一助になれば幸いです。