HBase at Ameba
-
Upload
toshihiro-suzuki -
Category
Technology
-
view
5.493 -
download
0
description
Transcript of HBase at Ameba
Summit Developers
Developers Summit 2013 Action !
HBase at Ameba ~AmebaのおけるHBaseの導入事例~
鈴木俊裕 株式会社サイバーエージェント
アメーバ事業本部
プラットフォーム部門
Ameba Technology Laboratory
14-A-2 #devsumiA
Summit Developers
Developers Summit 2013 Action !
自己紹介
• 鈴木 俊裕(すずき としひろ) • ソフトウェアエンジニア
• 株式会社サイバーエージェント – アメーバ事業本部 – プラットフォーム部門 – Ameba Technology Laboratory
• Hadoopを使ったログ解析基盤の開発・運用 • HBaseをつかった基盤システムの開発・運用
• Twi;er @brfrn169
Summit Developers
Developers Summit 2013 Action !
今日話したいこと
• HBaseについて
• AmebaにおけるHBaseの導入事例 – グラフDB「Hornet」 – 社内ライブラリ「Json Persister」
Summit Developers
Developers Summit 2013 Action !
HBaseについて
Summit Developers
Developers Summit 2013 Action !
HBaseとは
• いわゆる「NoSQL」のひとつ
• Googleの基盤ソフトウェアである「Bigtable」のオープンソースクローン
Summit Developers
Developers Summit 2013 Action !
HBaseとは
• 分散ストレージ – 高可用性 – 高パフォーマンス
– 多次元ソートマップ
Summit Developers
Developers Summit 2013 Action !
HBaseの使いどころ
• 大量のデータ – そこまでデータが大きくならないなら必要ない
• Auto Sharding – データが自動的に分割され、負荷分散されていく – 運用コスト削減
Summit Developers
Developers Summit 2013 Action !
HBaseのアーキテクチャ
• マスタ型 HMaster(HBase)
HRegionServer(HBase) HRegionServer(HBase)
Zookeeper
HDFS(Hadoop Distributed File System)
・・・
Summit Developers
Developers Summit 2013 Action !
HBaseのアーキテクチャ
• HDFS(Hadoop Distributed File System) – 分散ファイルシステム – レプリカをデフォルトで3つ持つので信頼性が高い
• HBaseの信頼性はHDFSに依存している
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
ColumnFamily1 ColumnFamily2
Column1 Column2 Column3 Column4 Column5 row1
row2 row3 row4 row5 aaa bbb NULL ccc ddd
row6 row7 row8
・部分的にはRDBに似ている RowKey
(主キー、辞書順でソートされている)
Column Value
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
ColumnFamily1 ColumnFamily2
Column1 Column2 Column3 Column4 Column5 row1
row2 row3 row4 row5 aaa bbb NULL ccc ddd
row6 row7 row8
・でもちょっと違う Columnは
ColumFamilyによって グルーピング
▼ ▼ ▼ ▼
fff ggg
hhh iii jjj
Valueは複数バージョン を持つ
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
ColumnFamily1 ColumnFamily2
Column1 Column2 Column3 Column4 Column5 row1
row2 row3 row4
row5 row6 row7 row8
・データの分散の単位について
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
ColumnFamily1 ColumnFamily2
Column1 Column2 Column3 Column4 Column5 row1
row2 row3 row4
row5 row6 row7 row8
・データの分散の単位について RowKeyの範囲で Regionに分割される
Region1
Region2
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
• 各Regionはそれぞれ1つのHRegionServerに割り当てられる
• Rowの更新処理はアトミックに行われる – 同じRowは必ず同じHRegionServerに割り当てら
れる – CASやIncrementもできる
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
ColumnFamily1
Column1 Column2 row1
row2 row3 row4
row5 row6 row7 row8
ColumnFamily2
Column3 Column4 Column5
・データファイルについて
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
ColumnFamily1
Column1 Column2 row1
row2 row3 row4
row5 row6 row7 row8
ColumnFamily2
Column3 Column4 Column5
・データファイルについて
ファイル1 ファイル2
ファイル3 ファイル4
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
• 列指向データフォーマット
• ColumnFamilyはI/Oを分散したいときに使う
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
・各データファイルの実際の構造について
row1 ColumnFamily1 Column1 100 aaa
RowKey ColumnFamily Column Timestamp value
row1 ColumnFamily1 Column2 200 bbb
row2 ColumnFamily1 Column1 140 111 row2 ColumnFamily1 Column2 300 rrr row3 ColumnFamily1 Column1 400 fff row5 ColumnFamily1 Column1 130 333 row5 ColumnFamily1 Column1 500 uuu
row5 ColumnFamily1 Column2 300 555
RowKey + ColumnFamily + Column + Timestamp でソートされている
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
・各データファイルの実際の構造について
row1 ColumnFamily1 Column1 100 aaa
RowKey ColumnFamily Column Timestamp value
row1 ColumnFamily1 Column2 200 bbb
row2 ColumnFamily1 Column1 140 111 row2 ColumnFamily1 Column2 300 rrr row3 ColumnFamily1 Column1 400 fff row5 ColumnFamily1 Column1 130 333 row5 ColumnFamily1 Column1 500 uuu
row5 ColumnFamily1 Column2 300 555
複数Columnを持っているときは、 複数エントリになる
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
・各データファイルの実際の構造について
row1 ColumnFamily1 Column1 100 aaa
RowKey ColumnFamily Column Timestamp value
row1 ColumnFamily1 Column2 200 bbb
row2 ColumnFamily1 Column1 140 111 row2 ColumnFamily1 Column2 300 rrr row3 ColumnFamily1 Column1 400 fff row5 ColumnFamily1 Column1 130 333 row5 ColumnFamily1 Column1 500 uuu
row5 ColumnFamily1 Column2 300 555
ColumnがNULLの場合は、 保存されない
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
・各データファイルの実際の構造について
row1 ColumnFamily1 Column1 100 aaa
RowKey ColumnFamily Column Timestamp value
row1 ColumnFamily1 Column2 200 bbb
row2 ColumnFamily1 Column1 140 111 row2 ColumnFamily1 Column2 300 rrr row3 ColumnFamily1 Column1 400 fff row5 ColumnFamily1 Column1 130 333 row5 ColumnFamily1 Column1 500 uuu
row5 ColumnFamily1 Column2 300 555
複数バージョンを持っている場合は、Timestampのみ違うエントリになる
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
• ColumnFamilyは予め定義する必要がある – ファイルの分割単位
• Columnは後からいくらでも追加することができる – データファイル内でエントリが増えるだけ
Summit Developers
Developers Summit 2013 Action !
HBaseのデータモデル
• 従来のRDB(むりやり, インデックスとか無視) – table -‐> SortedMap<PrimaryKey, Record> – Record -‐> Map<Column, Value>
• HBase – table -‐> SortedMap<RowKey, Record> – Record -‐> Map<ColumnFamily, SortedMap<Column, SortedMap<Timestamp, Value>>>
Summit Developers
Developers Summit 2013 Action !
HBaseのAPI
• Get – Rowの全Columnまたは一部ColumnのValueを取
得
• Put – Rowの挿入、または更新
• Delete – Row全体、一部Column、一部バージョンの削除
Summit Developers
Developers Summit 2013 Action !
HBaseのAPI
• Scan – 任意の行をスキャン
• 範囲を指定 • フィルタを指定
• Increment – Valueをインクリメント
• CAS – Compare And Swap – 簡単なトランザクションを実現できる
Summit Developers
Developers Summit 2013 Action !
HBaseの設計の考え方
• RowKeyの範囲でRegionに分割されて負荷分散される – RowKeyの設計次第では負荷やデータ量が偏る
可能性がある
• RowKeyで辞書順にソートされている – 連続したRowはScanでまとめてとることができる
ので、1度に取りたいデータは連続して置いておく
Summit Developers
Developers Summit 2013 Action !
HBaseの設計の考え方
• RowのColumnをいくらでも増やすことができるし、ソートもされている。しかも更新処理がアトミック – ただし、データが偏る可能性あり
• Joinがない – 非正規化がほぼ前提
Summit Developers
Developers Summit 2013 Action !
HBaseの設計の考え方
• クエリに対してスキーマが決まる – RDBのようにデータ設計を 初にやらない – まずクエリを考えてから、どういうスキーマにして
いくかを考える
Summit Developers
Developers Summit 2013 Action !
参考までに
• CodeZineの連載「初めてのHBase」 – h;p://codezine.jp/argcle/corner/473
Summit Developers
Developers Summit 2013 Action !
HBaseを用いたグラフDB「Hornet」
Summit Developers
Developers Summit 2013 Action !
背景
• 昨年、「Ameba」のスマートフォン向けプラットフォームをリリース
Summit Developers
Developers Summit 2013 Action !
背景
• デカグラフ構想 – 各サービスのユーザー層を「ミニグラフ」と位置づ
け、1つの巨大なスマートフォン向けサービス(デカグラフ)を構築するという構想
ミニグラフ
ミニグラフ
ミニグラフ
ミニグラフ
ミニグラフ
ミニグラフ
デカグラフ
Summit Developers
Developers Summit 2013 Action !
背景
• そこで、ユーザのグラフ構造を保持するデータベースが必要 – データが大量になるのでスケールするデータベー
ス – オンライン処理
• 低レスポンスタイム • 高スループット
Summit Developers
Developers Summit 2013 Action !
背景
• 今までは、MySQL + Sharding
Ameba Pigg
Ameba なう
Ameba グルっぽ
Summit Developers
Developers Summit 2013 Action !
背景
• MySQL + Sharding – 書き込みがスケールしにくい – Shardの管理が大変
HBase
Summit Developers
Developers Summit 2013 Action !
なぜHBaseか
• スケールする • 書き込みが速い、そこそこの読み込み速度 • Range Scan • CAS、Increment • Auto Sharding
• ログ解析基盤にHadoopを用いていたため、ノウハウがあった
Summit Developers
Developers Summit 2013 Action !
Hornetのデータモデル
• プロパティグラフ
1
2
3
ノード リレーションシップ
follow
follow
Name Toshihiro
age 29
ノードの プロパティ
Name Ichiro
Age 29
Name Masahiro
Age 27
date 2013-‐01-‐01
favorite true
date 2013-‐01-‐10
favorite false
リレーションシップの プロパティ
ノードID リレーションシップのtype
Summit Developers
Developers Summit 2013 Action !
Hornetのアーキテクチャ
• HBase + Gateway(Java)
Client
Gateway Gateway Gateway
RPC
HBase
HDFS
Summit Developers
Developers Summit 2013 Action !
HornetのJava API
Node user1 = graphDbService.createNode();
・ノードの作成
Summit Developers
Developers Summit 2013 Action !
HornetのJava API
user1.setProperty("name", Bytes.toBytes("Toshihiro"));
・ノードのプロパティのセット
Summit Developers
Developers Summit 2013 Action !
HornetのJava API
Node user1 = graphDbService.createNode(); Node user2 = graphDbService.createNode(); Relagonship rel = user1.createRelagonshipTo(user2, "follow");
・リレーションの作成(typeは”follow”)
Summit Developers
Developers Summit 2013 Action !
HornetのJava API
rel.setProperty("date", Bytes.toBytes(System.currentTimeMillis()));
・リレーションのプロパティのセット
Summit Developers
Developers Summit 2013 Action !
HornetのJava API
// user1が“follow”している人を取得する List<Result> res = user1.select("follow", Direcgon.OUTGOING).getAll(); // user1を“follow”している人を取得する res = user1.select("follow", Direcgon.INCOMING).getAll();
・隣接ノードの取得
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• RowKey: – hash(startNodeId) + startNodeId + type + direcgon + (Long.MAX_VALUE -‐ gmestamp) + endNodeId
• ColumnFamily: – “h”
• Column: – “” (空のバイト配列)
• Value: – シリアライズしたプロパティ
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの追加(1が2をフォローする)
1
2
3
follow
Name Toshihiro
age 29
Name Ichiro
Age 29
Name Masahiro
Age 27
date 2013-‐01-‐01
favorite true
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの追加(1が2をフォローする)
RowKey Column Key
value
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの追加(1が2をフォローする)
RowKey Column Key
value
hash(1) + 1 + follow + OUTGOING + 200 + 2 h: date=2013-‐01-‐01, favorite=true
hash(2) + 2 + follow + INCOMING + 200 + 1 h: date=2013-‐01-‐01, favorite=true
プロパティの値 ノードID
ノードIDのハッシュ値
方向
Long.MAX_VALUE -‐ gmstamp
ノードID
タイプ
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの追加(1が3をフォローする)
1
2
3
follow
follow Name Toshihiro
age 29
Name Ichiro
Age 29
Name Masahiro
Age 27
date 2013-‐01-‐01
favorite true
date 2013-‐01-‐10
favorite false
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの追加(1が3をフォローする)
RowKey Column Key
value
hash(1) + 1 + follow + OUTGOING + 200 + 2 h: date=2013-‐01-‐01, favorite=true
hash(2) + 2 + follow + INCOMING + 200 + 1 h: date=2013-‐01-‐01, favorite=true
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの追加(1が3をフォローする)
RowKey Column Key
value
hash(1) + 1 + follow + OUTGOING + 100 + 3 h: date=2013-‐01-‐10, favorite=false
hash(1) + 1 + follow + OUTGOING + 200 + 2 h: date=2013-‐01-‐01, favorite=true
hash(3) + 3 + follow + INCOMING + 100 + 1 h: date=2013-‐01-‐10, favorite=false
hash(2) + 2 + follow + INCOMING + 200 + 1 h: date=2013-‐01-‐01, favorite=true
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの取得(1がフォローしてる人を取得)
1
2
3
follow
follow Name Toshihiro
age 29
Name Ichiro
Age 29
Name Masahiro
Age 27
date 2013-‐01-‐01
favorite true
date 2013-‐01-‐10
favorite false
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの取得(1がフォローしてる人を取得)
RowKey Column Key
value
hash(1) + 1 + follow + OUTGOING + 100 + 3 h: date=2013-‐01-‐10, favorite=false
hash(1) + 1 + follow + OUTGOING + 200 + 2 h: date=2013-‐01-‐01, favorite=true
hash(3) + 3 + follow + INCOMING + 100 + 1 h: date=2013-‐01-‐10, favorite=false
hash(2) + 2 + follow + INCOMING + 200 + 1 h: date=2013-‐01-‐01, favorite=true
hash(1) + 1 + follow + OUTGOING でプレフィックススキャン
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの取得(1がフォローしてる人を取得)
RowKey Column Key
value
hash(1) + 1 + follow + OUTGOING + 100 + 3 h: date=2013-‐01-‐10, favorite=false
hash(1) + 1 + follow + OUTGOING + 200 + 2 h: date=2013-‐01-‐01, favorite=true
hash(3) + 3 + follow + INCOMING + 100 + 1 h: date=2013-‐01-‐10, favorite=false
hash(2) + 2 + follow + INCOMING + 200 + 1 h: date=2013-‐01-‐01, favorite=true
hash(1) + 1 + follow + OUTGOING でプレフィックススキャン
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの取得(2をフォローしてる人を取得)
1
2
3
follow
follow Name Toshihiro
age 29
Name Ichiro
Age 29
Name Masahiro
Age 27
date 2013-‐01-‐01
favorite true
date 2013-‐01-‐10
favorite false
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの取得(2をフォローしてる人を取得)
RowKey Column Key
value
hash(1) + 1 + follow + OUTGOING + 100 + 3 h: date=2013-‐01-‐10, favorite=false
hash(1) + 1 + follow + OUTGOING + 200 + 2 h: date=2013-‐01-‐01, favorite=true
hash(3) + 3 + follow + INCOMING + 100 + 1 h: date=2013-‐01-‐10, favorite=false
hash(2) + 2 + follow + INCOMING + 200 + 1 h: date=2013-‐01-‐01, favorite=true
hash(2) + 2 + follow + INCOMING でプレフィックススキャン
Summit Developers
Developers Summit 2013 Action !
Hornetのスキーマ(リレーションシップ)
• 例:リレーションシップの取得(2をフォローしてる人を取得)
RowKey Column Key
value
hash(1) + 1 + follow + OUTGOING + 100 + 3 h: date=2013-‐01-‐10, favorite=false
hash(1) + 1 + follow + OUTGOING + 200 + 2 h: date=2013-‐01-‐01, favorite=true
hash(3) + 3 + follow + INCOMING + 100 + 1 h: date=2013-‐01-‐10, favorite=false
hash(2) + 2 + follow + INCOMING + 200 + 1 h: date=2013-‐01-‐01, favorite=true
hash(2) + 2 + follow + INCOMING でプレフィックススキャン
Summit Developers
Developers Summit 2013 Action !
まとめ
• HBaseを用いたグラフDB「Hornet」 – スキーマ設計について
• 今後 – オープンソースで公開したい
Summit Developers
Developers Summit 2013 Action !
社内ライブラリ「Json Persister」
Summit Developers
Developers Summit 2013 Action !
背景
• 弊社ではサービスを複数ラインで同時に開発している
• スピード感は命であり、いかに開発スピードをあげられるかが非常に重要
Summit Developers
Developers Summit 2013 Action !
背景
• データベースに着目
• 一部基盤化はされているものの
• 各サービスでデータベースを立てている状況 – MySQL – Redis – …etc
Summit Developers
Developers Summit 2013 Action !
背景
• ここに、HBaseを使うことは出来ないか – スケールする – 高可用性 – 高パフォーマンス – Auto Sharding
• HBaseを1つ作って全てのサービスのデータを入れることで運用を一元化できたら良さそう
Summit Developers
Developers Summit 2013 Action !
背景
• とはいえ、HBaseは結構難しい
• いかに簡単にするか • RDBに慣れているエンジニア
Summit Developers
Developers Summit 2013 Action !
Json Persister
• 社内ライブラリ
• JavaオブジェクトをJsonデータとして永続化するフレームワーク
• Javaオブジェクトを直接save、loadするシンプルなAPI
• データストア層は切り替えられるようになっている – もともとあったのはMySQL版
Summit Developers
Developers Summit 2013 Action !
Java API
• シリアライズするクラス @Persistable public class UserData { @PrimaryKey private String userName; @Indexed private Integer age; private Date date; ...省略 }
主キーの設定
インデックスの設定
Summit Developers
Developers Summit 2013 Action !
Java API
• 保存(save)
UserData userData = new UserData(); userData.setUserName("yuhsaku"); userData.setAge(32); userData.setDate(new Date()); jsonPersister.save(userData);
Summit Developers
Developers Summit 2013 Action !
Java API
• 主キーで取得(load)
UserData userData = new UserData(); userData.setUserName("yuhsaku"); UserData result = jsonPersister.load(userData);
Summit Developers
Developers Summit 2013 Action !
Java API
• 取得(list)
UserData query = new UserData(); query.setAge(32); Criteria<UserData> criteria = Criteria.createCriteria(UserData.class).andEquals(query); List<UserData> resultList = jsonPersister.list(criteria);
インデックスで検索
Summit Developers
Developers Summit 2013 Action !
Json Persister
• シンプル
• このインターフェースにのせれば簡単にHBaseを扱えそう
HBase実装を開発
Summit Developers
Developers Summit 2013 Action !
スキーマ設計(主キー)
• RowKey: – 主キー名 + 主キーの値
• ColumnFamily: – “h”
• Column: – “” (空のバイト配列)
• Value: – Json
Summit Developers
Developers Summit 2013 Action !
スキーマ設計(インデックス)
• RowKey: – インデックス名 + インデックス値 + 主キーの値
• ColumnFamily: – “h”
• Column: – “” (空のバイト配列)
• Value: – Json
Summit Developers
Developers Summit 2013 Action !
例
• 保存(save)
UserData userData = new UserData(); userData.setUserName(”yusaku"); userData.setAge(32); userData.setDate(new Date()); jsonPersister.save(userData);
Summit Developers
Developers Summit 2013 Action !
例
RowKey Column Key
value
Summit Developers
Developers Summit 2013 Action !
例
RowKey Column Key
value
Age + 32 + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
UserName + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
主キー名 主キーの値 Json
インデックス名 インデックスの
値 主キーの値 Json
Summit Developers
Developers Summit 2013 Action !
例
• 保存(save)
UserData userData = new UserData(); userData.setUserName(”taro"); userData.setAge(32); userData.setDate(new Date()); jsonPersister.save(userData);
Summit Developers
Developers Summit 2013 Action !
例
RowKey Column Key
value
Age + 32 + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
UserName + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
Summit Developers
Developers Summit 2013 Action !
例
RowKey Column Key
value
Age + 32 + “taro” h: {UserName : “taro”, age : 32, date : 234567}
Age + 32 + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
UserName + “taro” h: {UserName : “taro”, age : 32, date : 234567}
UserName + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
Summit Developers
Developers Summit 2013 Action !
例
• 主キーで取得(load)
UserData userData = new UserData(); userData.setUserName("yuhsaku"); UserData result = jsonPersister.load(userData);
Summit Developers
Developers Summit 2013 Action !
例
RowKey Column Key
value
Age + 32 + “taro” h: {UserName : “taro”, age : 32, date : 234567}
Age + 32 + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
UserName + “taro” h: {UserName : “taro”, age : 32, date : 234567}
UserName + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
• RowKeyがUserName + ”yusaku”
Summit Developers
Developers Summit 2013 Action !
例
RowKey Column Key
value
Age + 32 + “taro” h: {UserName : “taro”, age : 32, date : 234567}
Age + 32 + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
UserName + “taro” h: {UserName : “taro”, age : 32, date : 234567}
UserName + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
• RowKeyがUserName + ”yusaku”
Summit Developers
Developers Summit 2013 Action !
例
• 取得(list)
UserData query = new UserData(); query.setAge(32); Criteria<UserData> criteria = Criteria.createCriteria(UserData.class).andEquals(query); List<UserData> resultList = jsonPersister.list(criteria);
Summit Developers
Developers Summit 2013 Action !
例
RowKey Column Key
value
Age + 32 + “taro” h: {UserName : “taro”, age : 32, date : 234567}
Age + 32 + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
UserName + “taro” h: {UserName : “taro”, age : 32, date : 234567}
UserName + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
• RowKeyがAge + 32 でプレフィックススキャン
Summit Developers
Developers Summit 2013 Action !
例
RowKey Column Key
value
Age + 32 + “taro” h: {UserName : “taro”, age : 32, date : 234567}
Age + 32 + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
UserName + “taro” h: {UserName : “taro”, age : 32, date : 234567}
UserName + “yusaku” h: {UserName : “yusaku”, age : 32, date : 123445}
• RowKeyがAge + 32 でプレフィックススキャン
Summit Developers
Developers Summit 2013 Action !
まとめ
• 社内ライブラリ「Json Persister」のHBase版を実装 – スキーマ設計
• 今後 – オープンソースで公開したい
Summit Developers
Developers Summit 2013 Action !
I suggest your Next Acgon!
Summit Developers
Developers Summit 2013 Action !
HBaseを触ってみよう
• 書籍「HBase」 – h;p://www.amazon.co.jp/dp/4873115663
M Y R E C O M M E N D N E X T A C T I O N !
Summit Developers
Developers Summit 2013 Action !
HBaseを触ってみよう
• CodeZineの連載「初めてのHBase」 – h;p://codezine.jp/argcle/corner/473
M Y R E C O M M E N D N E X T A C T I O N !
Summit Developers
Developers Summit 2013 Action !
It’s your turn.