スマートスタイル TECH BLOG

MariaDB と MySQL のソースコードの類似度を調べる

【訂正とお詫び】 Percona Server の開発方法について誤りがありました。訂正するとともに深くお詫び申し上げます。

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 のソースコードでコピペ判定されたところは類似しているとします。ざっくりとした指標ですが、以下の計算式を類似度とします。

類似度(%) = コピペ判定された行数 / コード行数 * 100

全てのソースコードを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 のどれを選択するかの一助になれば幸いです。


MariaDB

 

Return Top