SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

初めてのHBase

HBaseを使ってグラフDBを作ってみよう(中編)

初めてのHBase 第6回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 前回は、株式会社サイバーエージェントでのHBaseのユースケースの一つであるグラフDBを作りました。今回は、前回作成したグラフDBにリレーションシップのプロパティによるセカンダリインデックス機能を追加していきます。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 今回は、前回作成したグラフDBに、リレーションシップのプロパティによるセカンダリインデックス機能を追加します。

 セカンダリインデックスを用いることで、隣接リレーションシップをフィルタリングをしたり、ソートした状態で取得することが可能です。

対象読者

  • HBaseを使ってみたいけど、どう使ったらよいか分からない方
  • MySQLなどのRDB以外のデータベースを使ってみたい方

要件定義

 前回作成したグラフDBに、以下の機能を追加します。

  • あるノードの隣接リレーションシップを、単一のリレーションシップのプロパティによるフィルタとソートを指定して取得できる。

 リレーションシップのプロパティのセカンダリインデックスを作成することによって、上記の要件を満たすことが可能です。

 今回は、すべてのリレーションシップのプロパティに対してセカンダリインデックスを作成する仕様にします。

論理設計

 論理設計については前回と同様です。

物理設計

 それでは、物理設計に入ります。

 物理設計は、「クエリ設計」をした後に、HBase上にどうマッピングするかを設計する「スキーマ設計」を行います。

クエリ設計

 まず、クエリから考えていきましょう。

 要件定義からクエリを考えていくと、以下のようなメソッドを実装すれば良いと思います。

// 隣接リレーションシップの取得(セカンダリインデックスを使用)
List<Relationship> select(String nodeId, String type, Direction direction, Filter filter, Sort sort, int length) throws IOException;

 Filterクラスと、Sortクラスは以下のようになります。

public class Filter {
  // フィルタリングするプロパティ名
  private String propertyName;

  // オペレータ
  private Operator operator;

  // フィルタリングする基準となる値
  private String value;

  // ... setterやgetterは省略
}
public class Sort {
  // ソートするプロパティ名
  private String propertyName;

  // 順序(昇順、降順)
  private Order order;

  // ... setterやgetterは省略
}

 また、OperatorとOrderは以下になります。

public enum Operator {
  EQUAL, // 等しい
  GREATER, // 大きい
  GREATER_OR_EQUAL, // 大きいか等しい
  LESS, // 小さい
  LESS_OR_EQUAL // 小さいか等しい
}
public enum Order {
  ASC, // 昇順
  DESC // 降順
}

 前回実装したselectとの違いは、FilterとSortの指定ができることです。

 Filterを指定することで、隣接リレーションシップのプロパティの値とオペレータを基準にフィルタリングできます。

 また、Sortを指定することで隣接リレーションシップのプロパティの値でソートされた状態で取得することができます。

 FilterとSortを同時に指定することはできますが、propertyNameは同じものを指定しなくてはなりません。

 今回は、複数プロパティに対応したセカンダリインデックスを対象としていないためです。

次のページ
スキーマ設計

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
初めてのHBase連載記事一覧

もっと読む

この記事の著者

鈴木 俊裕(スズキ トシヒロ)

株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory 2008年4月に株式会社サイバーエージェントに新卒で入社。基盤システムの開発・運用に従事する。 2010年4月にHadoop/Hiveを用いたログ解析基盤の開発・運用を担当する。 2011年4月に、ログ解析、レコメンド、検索エンジンなどを開発するAmeba Technology Laboratoryの立ち上げメンバーとなる。 2011年10月からHBaseを用...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7486 2013/11/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング