MySQLがダメならPostgreSQLしかないのか

巷ではOracleMySQLオープンソースじゃなくする?*1みたいな噂が駆け巡ってますが、なにも本家MySQLじゃなくたって、MySQLからフォークしたRDBMSがいくつかあるんですよ。

ブコメの反応とかで疑問に思っていたのは、何故すぐに「PostgreSQLに移行しないと!」っていう発想に陥るのか。

例えば「INSERT INTO ... ON DUPLICATE KEY UPDATE ...」などの構文はMySQL系のRDBMSでしか使えなかったはずですし、その他の動作*2にもかなりの違いがあるので、その知識を捨ててでもPostgreSQLに移行する価値はあるか?と言われると正直微妙な気がします。。。

じゃあMySQLからフォークしたのを使えばいいじゃない!

MySQLからフォークしたRDBMSは大きなところで3つ挙げられます。
名前は前からなんとなく知ってはいたんですが、必要に迫られることも無かったので特に調べていませんでした。
これを機会にちょっと調べてみたところ、三者にはそれぞれちょっとずつ違う特徴があるらしいです。

以下、個人的に調べた簡単な特徴です(あんまり当てにしないでください)。

  • Percona Server
    • 本家MySQLのコードから核となる部分はそんなに変えてないっぽい。互換性問題で迷ったらこれ使っておいたらいいと思います。
    • (本家と同じく)ひとつの企業が開発を主導。もちろん、いきなり使えなくなることはないと思うが、あまり気軽に開発に参加できないっていうクローズドさはあるかもしれない。Oracleよりはマシだと思うけど、今後同じような問題が噴き上がることが絶対にないとは言えない。
  • MariaDB
    • MySQLのコア・コードをかなりいじってる。とはいえ互換性も取られてるようなので代替としては使えそう。
    • 本家MySQLの開発者だった人物が立ち上げた会社が開発を支援、Perconaよりは開発に参加するのが容易そうなのでよりオープンな感じはする。
  • Drizzle
    • 「元々はMySQLをフォークしたものの今はほぼ別物」って感じがする。C++で書かれててマイクロカーネルでプラガブルでなMySQLみたいな感じ?
    • 上の2つと違って互換性に関してはとっても微妙な気がするが、いろいろと野心的な感じで将来性は感じる。既存のコードを大きく書きなおす覚悟&確固たる目的があって使うなら選択肢としてアリ。

上の3つのうち、Perconaだけ少し使って見ましたが、本家MySQLで使っていた設定を全く弄ることなく使えましたし、動作的にもほぼ変わり無いような感じでした。
MariaDBも(情報が確かなら)ほとんど弄ることなく移行できると思われます。
この2つには「Handlersocket」プラグインが最初から入ってるのが何気に嬉しいですね。
互換性を優先するならPercona、互換性を少し犠牲にしてでもパフォーマンスを取りたい場合はMariaDBを選ぶといいんじゃないでしょうか。

Drizzleに関してはかなり特定のターゲットに的を絞って作られているようなので、色々と実験するときには楽しいかもしれません。

参考

ぶっちゃけ、この資料に目を通しておけば上のクソみたいなまとめなんて読まなくても大丈夫なんですよね。
MySQL を超える