★受講中に書いていたメモを、推敲無しでそのまま上げています。
★誤字脱字、内容の漏れなどあるかと思いますがご了承下さい。。
HBase at Ameba / 鈴木俊裕氏@サイバーエージェント
導入
AmebaにおけるHbaseの導入事例
自己紹介
- @brfrn69
- Ameba ソフトウェアエンジニア
- テクノロジーラボラトリー
HBaseについて
- 会場で使ったことある人は20–30%ほど
- BigTableのOSSクローン
- 可用性が高い、多次元ソートマップ、ハイパフォーマンス
- Auto Sharding
- 自動分割、運用負荷の分散
Master-Slave型アーキテクチャ
- アーキテクチャ説明(Region,、SPOF回避、HDFS)
- HBaseの信頼性はHDFSに依存
HBaseのデータモデル
- 列志向データフォーマット
- RowKey/ColumnFamily/Column/Timestamp/value
- ColomnFamilyはIO分割したいときに使う
HBaseのAPI
- Get
- Put
- Scan
- 範囲・フィルタ
- Increment
- valueのインクリメント
- CAS(Compare Ans Swap)
- 簡単なトランザクションが実現できる
HBaseの設計
- RowKeyの設計で負荷やデータ量が偏る可能性がある
- RowのColumnはいくらでも増やせる。ソートもされるし、更新もAtomic
- Joinはない=非正規化がほぼ前提
- クエリに対してスキーマが決まる。
- RDBだとまずスキーム
- Codezine「初めてのHBase」読んでね!
グラフDB “Hornet”
- Amebaのスマホ向けプラットフォームをリリース
- デカグラフ構想
- 各サービスのユーザ層:ミニグラフ
- ユーザのグラフ構造を保持するデータベースが必要
- スケール、高スループットが必須
- 従来はMySQL+Sharding
- Pigg、グルっぽ、なう、みんなMySQL *書き込みのスケールに難
- Shardingの管理が大変
- そこでHBaseの採用
- スケールする、速い、Scan、AutoSharding
- 元々ログ解析にHadoopを使っていたので、ノウハウもあった
Hornet
- データモデル:プロパティグラフ
- JavaAPIの説明
- スキーマ(リレーションシップ)の説明:フォロー関係を例に
- RowKey:hash(NodeId)+StartNodeId+type+direction+timestamp+endNodeId
- ColumnFamily:“h:”(単一の値)
- Column:""(未使用)
- Value:Serializeしたプロパティ(dateとかfavoriteとか)
- プレフィックススキャンを使ってリレーションを取得(正引き・逆引き)
- 今後オープンソース公開したい。
社内ライブラリ
- 社内で複数サービスを同時展開している
- DB、一部基盤化はされているが、各サービスで個別に構築している。
- MySQL,MongoDB,Casandra,,,
- DBをHBaseに統合することで運用を一元化・障害削減したい
- いかにRDBに慣れているエンジニアにとって簡単にできるか
Json Persister
- 「JSONデータとしてJavaオブジェクトを永続化する」社内フレームワーク
- Beanをシリアライズする
- 主キーとかインデックスとかをannotate
- 主キーで取得(load)、リスト取得(list)。シンプル。
- このシンプルなインターフェースを介してHBaseを使おう。
- これもオープンソース公開したい。
おわりに
- HBase触ってみませんか?
0 件のコメント:
コメントを投稿