2013年6月7日金曜日

JBoss Data Grid の機能紹介 (KVS)

こんにちは。村田です。

当ブログにて Red Hat JBoss Data Grid の連載が始まっていますが、今回は JBoss Data Grid で使われる技術より最近何かと耳にする機会が増えてきた KVS にスポットを当ててみたいと思います。

Red Hat JBoss Data Grid とは

JBoss コミュニティプロジェクトの Infinispan をベースに開発された KVS型 インメモリ・データグリッド(インメモリ・データストア)製品となります。

KVS = キー・バリュー・ストアとは

「キー」と「バリュー(値)」のペアからなるシンプルなデータ・モデルに基づくデータストアです。 RDB (relational database) と比較してデータ構造がシンプルなため、データを分散させやすく高可用性の構成が組みやすいと言われています。一方、スキーマに基づくテーブル構造を持たないため、複雑な検索や集計は KVS の得意とするところではありません。上記の特性から保管するデータ構造がどのようなものかを見極めて KVS を使用するか RDB を使用するかを判断する必要があります。

では、なぜ複雑な検索や集計には向かないのか、KVS と RDB の特徴からそれぞれが苦手分野とするものを交えて挙げてみたいと思います。


KVS と RDB の比較

■ KVS が苦手とする分野

  • JOIN 文(Table の結合)を使用する 複雑な条件検索や集計処理
    構造上、キーを基に検索を行う仕組みのため苦手分野とは言われているが、 REST API を使用することでこの問題は回避できる。

  • トランザクションによる「ACID 特性」の確保
    重要なデータ(決裁関連や金銭に伴う情報)を取り扱うのに重要とされる ACID 特性 (※1) が KVS 単体で確保できないため、プリケーション側で分散 KVS を配慮した作りこみを行う必要がある。

  • ※1 「ACID特性」とは
    関連する複数の処理を一つの処理単位にまとめて管理するトランザクション処理に求められ る以下 4 つの特性の頭文字をつなぎ合わせたもの。
    • Atomicity ( 原子性 )
      トランザクションに含まれる個々の手順が「すべて実行される」か「 一つも実行されない」のどちらかの状態になるという性質である。
    • Consistency ( 一貫性 )
      トランザクションの前後でデータの整合性が保たれ、矛盾の無い状態が継続される性質である。
    • Isolation ( 独立性 )
      トランザクション実行中の処理過程が外部から隠蔽され、他の処理などに影響を与えない性質である。
    • Durability ( 耐久性 )
      トランザクションが完了したら、その結果は記録され、システム障害などが生じても失われることがないという性質である。

■ RDB が苦手とする分野

  • 分散化のコスト
    一般的な RDB では 1 テーブルのレコードが数百万~数千万の規模になると 1 台の DB サーバでは実用に耐えられなくなってきます。 memcached などを使用して分散化することは可能ですが、費用は非常に高くつきます。

  • スケーラビリティ
    一般的な RDB では、トランザクションに含まれるすべてのデータについて ACID 特性(CAP 定義 ※2 の C = Consistency)を保証するため、可用性と分散化の間にトレードオフが発生します。
    負荷分散と冗長化のために RDB をクラスタリングすると、整合性確保のためにそれぞれのデータが高頻度でロックされ、スケーラビリティは頭打ちになってしまいます。

    ※2 CAP 定理

    ブリュワーの定理とも呼ばれる分散システムのマシン間の情報複製に関して、次の 3 項目は同時に 3 つの保証を提供することはできないことを定理しています。

    • 一貫性 ( Consistency )
      すべてのノードにおいて同時に同じデータが見えなければならない。
    • 可用性 (Availability)
      ノート障害により、他の生存ノードの機能性は損なわれない。
    • 分断耐性 (Partition-tolerance)
      システムは通信障害などによるデータ損失が発生しても、継続して動作する。

この様に KVS と RDB にはそれぞれが得意とする分野がありますので、機能面だけに注目することなく、製品の特性を理解頂きました上で、ご利用のデータがどのようなものかを分析・検討いただくことをお奨めします。

そして、スケーラビリティや分散化が必要となるようなデータ処理には、ぜひ Red Hat JBoss Data Grid の採用をご検討ください。

0 件のコメント:

コメントを投稿