読者です 読者をやめる 読者になる 読者になる

DB仮想化について

JBossDataVirtualization DB仮想化

f:id:haru_skywalker:20141203151846j:plain

DB仮想化とは

DB仮想化について最近色々と調べているので、忘れないうちにメモ。

私なりの解釈で要約すると、ポイントは以下の通りです。

  • 異なるシステム・DB種類のデータソースをバーチャルに統合
  • リアルタイム性の確保
  • データの重複管理の回避

ある程度の規模のシステムおいては、拠点や会社によってシステムおよびデータが散在しているケースはよくあり、昨今ではそれら複数のデータソースを統合・分析するといったニーズが高まっています。
このようなケースでは、ETLツールを用いてバッチ処理でDWHにデータを集めるといったことが多いかと思われますが、記事にもあるように「タイムラグとデータの重複」と言った問題が避けられません。データを抽出して転送する処理にも多くのコストが発生します。
これらを解決するためのツールとして、DB仮想化ツールがあります。

実際に私が関わった環境では、AWS上のRedshiftとOracleのデータを、リアルタイムに結合されたデータとして取得できるようにセットアップしました。

DB仮想化ツール

DB仮想化ツールはいくつかあるようですが、私はRedHat社の JBoss Data Virtualization しか触ったことがないので、その他について時間があれば調査します…。

JBoss Data Virtualization - データ統合 | Red Hat

課題

この記事が大枠を語っているので、まずはこれを見たほうが早いと思います。

DBaaSはどこまで企業情報システムを変えるか(1):システム統合最後のボトルネック 基幹系DBの集約は既に現実のものに - @IT

私はまだ具体的な運用まで行っているわけではないので、あくまでツールの検証段階の所見ですが、記事を一部抜粋すると

「多くのトランザクションが発生しないようなシステムでは仮想化も可能ですが、ミッションクリティカルなシステムや性能を重視するシステムでのDB仮想化は現実的ではない。スモールスタートで始めたときには問題にならなくても、拡張していくと、I/O性能の高い高価なストレージを増設せざるを得ず、結果、コストが膨大になってしまい後悔したという話はよく聞く」

これは遠くない将来、ぶちあたる問題だと感じています。
また、

可用性の問題では、例えば、仮想化製品には仮想化製品特有のマイグレーション技術があり、これらの技術はOSやアプリケーションのマイグレーションには適しているものの、DBのトランザクション保証などを詳細に行うことができない。このため、ミッションクリティカルなシステムで利用することは非常に危険だ。

JBoss製品しか分からないので、当製品に限定した話になりますが、「特有のマイグレーション技術」という部分については、確かに独特な部分が多いため、導入段階の学習コストはやや高めといった印象です。運用ノウハウもそれほど共有されていないように思えるので、ミッションクリティカルなシステムでの利用の危険性は確かに感じます。

トランザクションの保証についていえば、JBoss製品は一応XAトランザクションに対応した機能があります。ただし、先述したRedshiftとOracleといったような組み合わせの場合、Redshift側がXAトランザクションに対応していないので、その場合には特殊な設定が必要になります。出来ないわけではないが、トランザクションの保証を詳細に行おうとすると、ノウハウが薄い状態では何かとハードルが高い、といった印象です。

また、データの重複管理の回避についてですが、ツール内でもデータを保持するような設定も出来るため、厳密に言えば重複管理になる場合もあります。
ただしそこに管理コスト(人的リソースという意味で)が発生するかどうかという点では、メモリまたはHDDの容量を気にする以外には、ほぼ発生しないと考えて良いと思います。

まとめ

参照だけを行うような利用(更新処理を行わない)、あまり複雑なことをしない、という前提条件ならば非常に魅力的です。
BIツール参照元となるような利用にはとても向いていますが、入出金や請求処理といったミッションクリティカルなケースでの導入は慎重になったほうが良いと思いました。