もふもふ技術部

CentOS6でMariaDBのDynamic Columnsを試してみた


知っての通り、MariaDBはMySQLの創設者が、MySQLをforkして作られた派生系のDBですね。

MySQLがOracle傘下に入ってしまったのでその辺でごにょごにょすることがあったんでしょうか。事情については調べるといろいろ出てくると思うので調べてみると楽しいかも知れません。

それはさておき、実際にインストールしてSQLを叩いたりしてみますね。

MariaDBインストール編

最初開発マシンのMacに入れようとしてこちらのエントリを見てやってみました。

http://qiita.com/kozmats/items/ac32f1ac1d676a09e3b2](http://qiita.com/kozmats/items/ac32f1ac1d676a09e3b2)

が、mysqlと競合するからmysqlをunlinkせよと。。
開発中のプロジェクトがMySQLで動いているものも多いのでちょっとサクッとMariaDBに変更するわけにはいかないっす。

しょうがないのでVagrantでCentos6.5でやりますわ。

主にこちらを参考にさせていただきました。
http://love-zawa.hatenablog.com/entry/2014/07/24/CentOS_6_5%E3%81%ABMariaDB_10_0_12%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB(yum%E3%82%92%E4%BD%BF%E7%94%A8)

yumリポジトリを追加。

yumでインストールします。
怒られました。

mysql-libsをremoveするといけるみたい。うん、うまくいった。

初期化処理を実行。これは多分やらなくても良いかも。

MariaDBサービスが追加されるわけではなく、mysqlサービスをそのまま使うみたい。

DBに接続するのも、mysqlコマンドのままでいける。普通にインストールしたらmysqlはしれっとリプレースされるのか。

基本的にはmysql互換らしいから大丈夫っちゃ大丈夫だとは思うけど。
http://www.e-agency.co.jp/column/20130208.html

Dynamic Columnsを試して見る

こちらが本題。Dynamic Columnsはそのまま動的カラムってことなんですが、NoSQLの仕組みを融合したようなものです。

PostgresであればJSON型というものが存在していて、1カラムに構造的なJSONデータを持つことができるので、RDBの堅牢さとドキュメント指向DBの柔軟さのおいしいとこどりができたりします。

ざっくり言っちゃうとBLOB型で同じようなことができる仕組みですね。JSONとは限らないんだけど。

具体的なSQLはこちらを参考にさせていただきました。
http://d.hatena.ne.jp/interdb/20140414/1397448302

試しようにDBとテーブルを作ります。

dynamic_colにkey,valueを保存して確認してみます。
普通にselectするとBLOB型なのでちょっと読みづらいですね。

dynamic_colにもう一件データを追加してまたselect
してみます。一件追加されているのがわかります。

もうちょっと読みやすい形式で取得します。COLUMN_GETを使用すれば普通のカラムっぽい形式で取得できます。

nameだけではなく、colorも同時に取得したい場合。複数のフィールドを取ろうとすると割と構文が冗長なっちゃいますね。別の書き方があるのかな?

dynamic_colにageフィールドを追加してみます。

selectで確認してみます。
うーん。複数フィールドとれてはいるけど、これだとbobもaliceも27歳になっちゃってる。COLUMN_ADDで指定した値は全ドキュメントに反映されるのかな?

dynamic_colに存在するすべてのフィールド名を取得してみます。column_listというのを使います。

column_jsonを使えばjson形式で取得できますね。これは使い勝手良さそう。

実際アプリケーションで使おうとするとDynamic Column内で検索したくなりますよね。

こちらを参考にやってみました。
https://mariadb.com/blog/dynamic-columns-tutorial-part-2-searching-and-updating

nameがBobのデータだけ取得してみます。

なるほどなるほど。基本的なところは少し理解しました。

通常のカラムとDynamic Columnsを同時に取得すると、1対多の結合結果みたいな感じで返ってくる感覚ですね。

まとめ

実は言うと今回はRailsから使いたかったので、ActiveRecordがDynamic Columnsに対応しているのがどうかコミットログ読んだりしたけど、MariaDBに関するログは見つけられなかった。

たぶんMySQLと同じようにSQLで何かする分には同じように使えるんだろうけどそれだったらMariaDBに乗り換える意味がないので微妙。

Dynamic Columnsを使いたい部分は自前でSQL組む感じで使えるかもだけどちょっとめんどそうだからやめといた方が良さそう。

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。