サンフランシスコを拠点とするStripeがMoSQLを発表した。これはMongoDBからのレポーティングを、PostgreSQLデータベースへのライブレプリケーションによって簡単にするツールだ。MoSQLはMongoDBデータのアップデートをほぼリアルタイムでモニタリングするコンパニオン製品、MongoRiver上に構築されている。
MoSQLの目的は、プロダクションデータのリードオンリーコピーに対するレポーティングやアドホッククエリを実行するところで、従来のRDBMS設計をシミュレートすることだ。ビジネス分析にかける前に、リードオンリーコピーに対して数回変換をかけるのはよくあることだ。したがって、これは未知の領域というわけではない。
MongoRiver
MongoRiverはMongoDB oplog tailingのための汎用ライブラリだ。これはRubyで書かれており、開発者はアップデート操作のためにMongoDBインスタンスを監視することができる。まだあまりドキュメントはなく、githubにはソースコードしか置かれていない。MongoRiverはMITライセンスで提供されている。
MoSQL
MoSQLはMongoRiver上に構築されており、実際のデータ変換を実行する。これには「コレクションマップファイル」と呼ばれるYAMLスタイルのマッピングファイルが必要になる。開発者がやらなくてはならないのは、このファイルを作ることだけだ。MoSQLはPostgreSQLに必要なターゲットテーブルを自動生成してくれる。
MoSQLはone-timeモードやtailingモードで動かせる。one-timeモードは“skip-tail”フラグで有効になり、単にインポートを実行する。tailingモードは前述のoplogを監視し、PostgreSQLと同期することができる。MoSQLを開始するときには、強制的にフレッシュインポートすることもできる。これは現在のテーブルをやめにして新しいテーブルを再生成する。
MongoDBデータベースの値が、定義されたスキーマに合わない場合(たとえば、INTEGERフィールドにおけるfloating-point値など)、MoSQLは警告をログに残し、そのオブジェクト全体を無視して続行します。
コレクションマップにないフィールドを持つMongoDBオブジェクトがあった場合、MoSQLはそのフィールドを捨てます。ただし、:meta hashに:extra_propsがセットされている場合は除きます。これがセットされている場合、欠けているフィールドを集め、ハッシュにJSONエンコードし、その結果得られたテキストをSQLの_extra_propsに保存します。JSONをどう使うかはあなた次第です。たとえば、plv8を使ってPostgreSQL内でパースしたり、JSONを全部抜き出してアプリケーションコードでパースしたりすることができます。
MoSQLもMITライセンスで提供されている。