異種RDBMS間のレプリケーションを可能にするSymmetric DS

0x00. Symmetric DSとは



Symmetric DSはオープンソースのJava製ソフトウェアで、トリガーベースのRDBMS間レプリケーションを行うソフトウェアである。ライセンスはLGPLだ。先日、Java製の組み込みRDBMSであるH2をレプリケーションする方法がないか探していたところ、H2のサイトからリンクされており見つけた。筆者自身はまだH2/Symmetric DSともに手元で動作確認を行っただけの段階であり、これらがどの程度実用に耐えるクオリティなのかは未知数だが、ドキュメントの整備のされ方やソフトウェアから伝わってくる感触は非常によいものである。

0x01. POSシステムから誕生


RDBMS自身がレプリケーションの機能を持つ場合も多いが、筆者にもっとも馴染みのあるPostgreSQLではレプリケーションのためにさらに別のソフトウェア(pgpool IIなど)を導入するケースがよく見られる。Symmetric DSもそのような「レプリケーション機能を持たないRDBMSでもレプリケーションを可能にする」ものだ。サイトのトップページに書いてあるように、大規模なPOSシステム間でのデータ転送のニーズから開発されたというやや異色なバックグラウンドを持つ。そのため単に2つのRDBMS間のデータを同期するだけではなく、複数の階層にまたがって多数のRDBMS間でのデータ転送も行うことができる。また、遅い回線やたまにオフラインになるような信頼性の低い回線をまたいだデータ転送も考慮されているようだ。

0x02. サポートするRDBMS


ドキュメントによるとMySQL/Oracle/PostgreSQLなどの主要なRDBMSのほか、HSQLDBやDerby,H2などのJava製組み込みRDBMSもサポートしている(ただしSQLiteはサポート外のようだ)。トリガーベースのアプローチを採るため、トリガーをサポートしており、さらにJDBCがサポートされていれば、Symmetric DSが使用できる可能性があるようだ。

非常にユニークなのは、トリガーベースの動作であるため、異なる種類のRDBMS間でのレプリケーションが可能であるということだ。これにより、例えばJavaアプリケーション内で動作しているH2のデータを、ネットワークを通じて、別の場所にある大規模サーバのPostgreSQLに同期しておき、データ解析等の重い処理はサーバ側で行う、ようなことが可能となる。例えば将来、Android端末内のH2をインターネット上のPostgreSQLに同期するようなアプリケーションが出てくるかもしれない。

0x03. 実際にさわった感触


筆者はドキュメントどおりのハンズオンを、以下の2パターンで行ってみた。

  • PostgreSQL – PostgreSQL間
  • PostgreSQL – H2間
  • どちらも特にハマることもなく、20〜50分ほどで動作確認までおこなうことができた。設定に不備がある場合にはエラーが出力されるが、この際わかりやすいエラーメッセージを出してくれることもあれば、Javaの例外のスタックトレースが大量に出て少々まいることもあった。レプリケーション対象とするRDBMSについての経験はもちろん、Javaの経験や、Springに関する知識があれば特に役に立つだろう。また、チュートリアルに取りかかる前に必ずこちらのうち、使うRDBMSの項目を読んでおくことをオススメする。

    H2とPostgreSQLという異なるRDBMS間で、双方向にデータがコピーされるのを確認できたときには、なかなかに新鮮でニヤリとさせられた。異種RDBMS間でもこのようなレプリケーションが可能であるということで、今後のシステム設計の際に柔軟な思考が可能となりそうだ。MongoDBなどもサポートされれば非常に楽しそうなのだが、MongoDBではトリガーがサポートされていないので厳しいかもしれない。

    0x04. Javaでの拡張が可能


    ドキュメントにあるように、Javaを使ってプラグイン的に機能を追加できるような仕組みが用意されている。おそらく実際に現場で使うことを強く想定したものとなっているのだろうと思われる。

    Symmetric DSの内部ではSpringフレームワークが使用されており、また配布アーカイブのlibディレクトリには多くのJDBCコネクタやJetty、JMS、JUnitなどのjarファイルが含まれている。おそらくJavaに非常に詳しい開発チームが存在しているのではないかと思う。

    0x05. おわりに


    個人的な意見として、著者が使い込んでいないソフトウェアの紹介記事はあまり面白くないという考えを持っている。この記事はその趣旨に反するのだが、Symmetric DSは発想からして面白いのにあまり紹介されていなさそうなので、このような記事を書いてみた。

    筆者自身は、RDBMSよりもMongoDBの(柔軟なスキーマ変更を可能とする)方向に向かいたいと考えており、実際の環境でこれからSymmetric DSを使う日が来るかどうかは定かではないが、いつかまたレプリケーションを行う必要があるケースに遭遇した場合には候補として挙げることになるだろう。

    Advertisements


    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s