Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

初めてのHBase 第6回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/11/15 14:00

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

目次

はじめに

 今回は、前回作成したグラフ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は同じものを指定しなくてはなりません。

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


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

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

    株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory 2008年4月に株式会社サイバーエージェントに新卒で入社。基盤システムの開発・運用に従事する。 2010年4月にHadoop/Hiveを用いたログ解析基盤の開発・運用を担当する...

バックナンバー

連載:初めてのHBase

もっと読む

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5