2015年8月1日土曜日

MySQL FEDERATEDエンジンの使い道を考える

http://thinkit.co.jp/free/article/0608/1/5/

FEDERATEDエンジンはトランザクションがサポートされていない以上、更新系には使えないと考えてよいと思う。
即時反映によりミラーみたいな感じで使えるかもと思ったけど、それだってトランザクション管理できないと何かあったときに不整合が起こるし。

負荷分散とかに使うとか書いてあるところもあったけど、リモートテーブルとFEDERATEDテーブルが1対1でしか作成できないから、それで負荷分散になるの?

検索に使用するなら、複数のDBを検索する場合にそれぞれのDBに接続→検索を繰り返す必要があるけれど、FEDERATEDを使用すれば表面上はDBへの接続は1回ですむから便利。
対象DBが1つなら、そもそもFEDERATEDを使う意味はないと思う。直接対象DBに接続すればよいだけだから。

検索に使用するなら、リモートテーブルをあたかも自身のテーブルとして扱うことができるので、join等が発生するケースなら便利。

更新がなく複数DBを使用した検索系のみのシステムとなると、情報の分析システムとかなら使えるのかも。
分析システム用DBを作ってFEDERATEDエンジンを使用して、複数の登録更新系システムのDBの情報を取得する。
DWHのようなシステムでなら使えるのかも。

・余談1
FEDERATEDエンジンがトランザクションをサポートしてないと知って茫然としていたとき、Sipderエンジンなるものを発見。
トランザクションもサポートされているようだし、パーティションという考えでこれぞ負荷分散という感じ。
こっちのほうが便利な気がする。
ただし、ドキュメントがあまりないし、MySQLが標準ではサポートしてないから導入するにはハードル高い。
MariaDBならSpiderエンジンがバンドルされるみたい。いいなぁ。

・余談2
Windows7にインストーラを使用してMySQLをインストールすると、FEDERATEDエンジンが使用できなかった。
試しにバイナリを配置すると使用できた。
原因不明。