PR

NOSQLの新顔、分散KVS「okuyama」の機能

2011年2月10日(木)
岩瀬 高博

NOSQLについて解説した前回の記事は、いかがだったでしょうか。今後のアプリケーションでは、増え続けるデータを扱うことが非常に多くなると思います。前回の記事が、こうしたケースに適した新たなストレージの1つとして、NOSQLを理解するきっかけになっていたら幸いです。

連載2回目の今回は、NOSQLの1つである「okuyama」の全体概要と、機能的な特徴を紹介します。

1. 「okuyama」の概要

okuyamaは、まだ聞きなれない方も多いかと思いますが、筆者が開発している分散キー・バリュー・ストアです。2009年12月ごろから開発を始めました。現在はSourceforge.jpにて公開しています。もともとは学習を兼ねて作成したため、一部のログ・ライブラリなどを除き、すべて1から実装しました。2010年1月にファースト・リリースを行い、現在はバージョン0.8.6となっています。

以降は、okuyamaの構成を詳しく紹介していきます。

2. 「okuyama」で何ができる?~機能的特徴とその仕組み

okuyamaの全体構成は、図1のようになっています。図を見ても分かるように、いくつものノード(図中の四角い箱)で構成されています。図の左から、クライアント、マスター・ノード、データ・ノードの3つで構成されています。それぞれのノードは、すべてネットワークで結ばれます。

マスター・ノードやデータ・ノードは、複数のノードで構成することが可能です。ノードに障害が起こった時のフェール・オーバーや負荷分散などは、すべてokuyama側で自動的に行います。ノードの追加によって性能を向上させられるスケールアウトの特性を備えています。

図1: 「okuyama」の全体構成

図1: 「okuyama」の全体構成(クリックで拡大)

以降は、各構成要素がどのような機能を提供するのかを解説します。

(1)クライアント

クライアントは、okuyama専用のクライアント・ライブラリです。okuyamaへのアクセスを実現します。

okuyamaへのアクセスを実現

  1. 実際にアプリケーションを実装する際に利用

    okuyamaは、memcachedプロトコルを使っても操作できますが(詳しくは後述)、こちらのクライアントを利用すれば、接続先になるマスター・ノードが障害を起こした場合の自動フェール・オーバーやオリジナルで備えている機能を、すべて利用することが可能です。処理性能も、専用プロトコルになるので、こちらのほうが高くなります。

    okuyamaクライアントを利用することで可能になるデータ操作は、以下の通りです。

    • データ登録およびTag登録:
      新規登録、更新といった概念はなく、要求されたデータを保存します。また、保存時にTagを登録することが可能です。Tagは、図2-1のように登録されます。

      図2-1: Tag登録

      図2-1: Tag登録(クリックで拡大)
    • Keyを指定してデータ取得:
      KeyとペアになるValueを取得します。
    • 複数のKeyを指定してデータ取得:
      複数のKeyを指定することで、存在するKeyとValueのペアのみを取得します。
    • Tagを指定してKey群を取得:
      データ登録時に登録したTagを利用して、Keyの集合を取得します。
    • Tagを指定してValue群を取得:
      データ登録時に登録したTagを利用して、Valueの集合を取得します。
    • データを新規登録:
      保存するKeyがまだ登録されていない場合に限って、登録に成功します。
    • Keyを指定してデータを削除:
      Keyが存在する場合はデータを削除します。
    • Keyを指定して、データと現在のValueのバージョン番号を取得:
      KeyとValueのペアを取得しますが、その際に現在のValueのバージョン番号も取得します。
    • バージョン番号を指定してデータを更新:
      KeyとValueのペアとバージョン番号を指定して、データを更新します。バージョン番号が一致しない場合は更新エラーになります。
    • Keyを指定してデータ取得する際に、JavaScriptを実行:
      通常のデータ取得時に、取得データに対してユーザーが指定したJavaScriptを実行します。JavaScript内で当該Valueにアクセスし、値の一致検索や更新などが行えます。
    • Keyを指定してValueを加算:
      Keyと加算したい数値を渡すことで、保存されているValueに加算処理を行います。Valueが数値ではない場合は0にクリアされます。
    • Keyを指定してValueを減算:
      Keyと減算したい数値を渡すことで、保存されているValueに減算処理を行います。Valueが数値ではない場合は0にクリアされます。

    現在の実装済み言語は、Java、PHPの2種類になります。またプロトコル表に関しては筆者のブログにアップしており、随時更新しています。

    なお、一部のプロダクトではSQLライクな問い合わせ言語が用意されているものもありますが、NOSQLには現状、RDBMSで利用できるSQLのような、仕様が確定した問い合わせ方式はありません。

  2. マスター・ノード障害時のフェール・オーバーも、図2-2のようにクライアントが自動的に実施

    図2-2: マスター・ノード障害時のフェール・オーバー

    図2-2: マスター・ノード障害時のフェール・オーバー
株式会社神戸デジタル・ラボ

2006年神戸デジタル・ラボに入社。企業内業務アプリケーション開発に従事。
2008年末から大規模ECサイトのアプリケーション、インフラ周りの運用に従事。
2009年末に分散Key-Value Store”okuyama”をオープンソースとして公開。
2010年から各都道府県で開催されるオープンソースカンファレンスへの出展やセミナー登壇、「NOSQL afternoon in Japan」や、「JavaCloud Meeting Kansai」での登壇といった”okuyama”の普及活動の傍ら、”okuyama”を使ったアプリケーション開発などに従事し、現在に至る。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています