分散KVSのデータモデリング

8,437 views
8,175 views

Published on

Published in: Technology
0 Comments
14 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,437
On SlideShare
0
From Embeds
0
Number of Embeds
78
Actions
Shares
0
Downloads
71
Comments
0
Likes
14
Embeds 0
No embeds

No notes for slide

分散KVSのデータモデリング

  1. 1. 分散 KVS の データモデリング
  2. 2. 分散 KVS の利点と課題 <ul><li>利点 </li></ul><ul><ul><li>Elastic scaling (弾力性のあるスケーラビリティ) </li></ul></ul><ul><ul><li>Big data (大規模データ) </li></ul></ul><ul><ul><li>Goodbye DBAs (さらばデータベース管理者) </li></ul></ul><ul><ul><li>Economics (経済性) </li></ul></ul><ul><ul><li>Flexible data models (柔軟なデータモデル) </li></ul></ul><ul><li>課題 </li></ul><ul><ul><li>Maturity (成熟) </li></ul></ul><ul><ul><li>Support (サポート) </li></ul></ul><ul><ul><li>Analytics and business intelligence (アナリティクスとビジネスインテリジェンス) </li></ul></ul><ul><ul><li>Administration (管理) </li></ul></ul><ul><ul><li>Expertise (専門性) </li></ul></ul><ul><li>NoSQL について知っておくべき 10 の事柄 </li></ul><ul><li>( http://www.publickey1.jp/blog/10/nosql10.html ) より引用 </li></ul>今日のテーマ
  3. 3. HBase 、 Cassandra のデータモデル <ul><li>multi dimensional sorted map </li></ul><ul><ul><li>多次元の整列済み連想配列 </li></ul></ul><ul><ul><li>Bigtableのデータモデル </li></ul></ul><ul><li>カラム指向(column oriented) </li></ul><ul><ul><li>RDBMSは行指向 </li></ul></ul><ul><ul><li>動的な列の定義が可能 </li></ul></ul><ul><li>Query-based model </li></ul><ul><ul><li>問い合わせに合わせてデータモデルを作り込む </li></ul></ul><ul><ul><li>RDBMSはDomain-based model </li></ul></ul>
  4. 4. データ構造 Column SuperColumn ColumnFamily Keyspace Cassandra 動的 動的 Column カラム 静的 Table ColumnFamily テーブル 静的 スキーマ 定義 HBase RDBMS
  5. 5. データの物理的配置 <ul><li>HBase </li></ul><ul><ul><li>テーブルのデータは適当なデータ量で分割される </li></ul></ul><ul><ul><li>どのノードがどの範囲のキーを持っているかはマスターで管理 </li></ul></ul><ul><ul><li>テーブル内のデータはキー順でソートされている </li></ul></ul><ul><li>Cassandra </li></ul><ul><ul><li>キーを元に計算されたトークンの値により、データを保存するノードが決定 </li></ul></ul><ul><ul><li>デフォルトではトークンはキーから計算されたハッシュ値なため、連続した値でも分散される </li></ul></ul><ul><ul><li>どのノードがどの範囲のキーを持っているかはクラスタ全体で共有している </li></ul></ul><ul><ul><li>トークンの生成ロジック ( Partitioner ) を入れ替えればキーでソートさせることも可能 </li></ul></ul><ul><ul><li>SuperColumn 、 Column は名前でソートされている </li></ul></ul>
  6. 6. データの取得 <ul><li>キーを指定して 1 件取得 </li></ul><ul><ul><li>メモリにキャッシュされていない場合は BloomFilter などを利用して取得 </li></ul></ul><ul><li>キーの範囲を指定して検索 </li></ul><ul><ul><li>HBase </li></ul></ul><ul><ul><ul><li>出来る。取得件数の上限無し </li></ul></ul></ul><ul><ul><li>Cassandra </li></ul></ul><ul><ul><ul><li>出来るが、 Partitioner の実装により動作が異なる </li></ul></ul></ul><ul><ul><ul><li>取得数の上限有り </li></ul></ul></ul><ul><li>カラム名の範囲を指定して取得 </li></ul><ul><ul><li>HBase </li></ul></ul><ul><ul><ul><li>出来る </li></ul></ul></ul><ul><ul><li>Cassandra </li></ul></ul><ul><ul><ul><li>出来る </li></ul></ul></ul><ul><ul><ul><li>取得数の上限有り </li></ul></ul></ul>
  7. 7. 設計例:ユーザの行動履歴 <ul><li>データ </li></ul><ul><ul><li>ユーザ ID </li></ul></ul><ul><ul><ul><li>ユーザごとに一意 </li></ul></ul></ul><ul><ul><li>行動 ID </li></ul></ul><ul><ul><ul><li>システムで一意 </li></ul></ul></ul><ul><ul><ul><li>新しい方が数字が大きい </li></ul></ul></ul><ul><ul><li>逆順ソート用行動 ID </li></ul></ul><ul><ul><ul><li>逆順ソート用に変換した行動 ID </li></ul></ul></ul><ul><ul><ul><li>新しい方が数字が小さい </li></ul></ul></ul><ul><ul><ul><li>10 桁固定 ( 先頭 0 埋め ) </li></ul></ul></ul><ul><li>要件 </li></ul><ul><ul><li>ユーザごとの行動履歴の最新 n 件を取得したい </li></ul></ul>
  8. 8. 設計例: HBase の場合 <ul><li>キー </li></ul><ul><ul><li>ユーザ ID_ 逆順ソート用行動 ID </li></ul></ul><ul><li>テーブル名・カラムファミリー名 </li></ul><ul><ul><li>UserAction </li></ul></ul><ul><li>カラム名 </li></ul><ul><ul><li>action </li></ul></ul><ul><li>値 </li></ul><ul><ul><li>ユーザの行動内容 </li></ul></ul><ul><li>最新 n 件の取得方法 </li></ul><ul><ul><li>キーの範囲検索 </li></ul></ul>C_9999999996 C_9999999993 C_9999999991 A_9999999999 B_9999999996 B_9999999998 C_9999999995 A_9999999992 A_9999999990 キー
  9. 9. 設計例: Cassandra の場合 <ul><li>キー </li></ul><ul><ul><li>ユーザ ID </li></ul></ul><ul><li>カラムファミリー名 </li></ul><ul><ul><li>UserAction </li></ul></ul><ul><li>スーパーカラム名 </li></ul><ul><ul><li>逆順ソート用行動 ID </li></ul></ul><ul><li>カラム名 </li></ul><ul><ul><li>action </li></ul></ul><ul><li>値 </li></ul><ul><ul><li>ユーザの行動内容 </li></ul></ul><ul><li>最新 n 件の取得方法 </li></ul><ul><ul><li>ユーザを指定してスーパーカラムの範囲検索 </li></ul></ul>C B A キー 9999999995 9999999994 9999999993 9999999991 9999999998 9999999996 9999999999 9999999992 9999999990 スーパーカラム
  10. 10. 設計方針 <ul><li>HBase </li></ul><ul><ul><li>出来るだけキーを細かい単位で設定 </li></ul></ul><ul><ul><li>キーの範囲検索で最新 n 件を取得 </li></ul></ul><ul><li>Cassandra </li></ul><ul><ul><li>キーはある程度荒い粒度に設定 </li></ul></ul><ul><ul><li>SuperColumn の範囲検索で最新 n 件を取得 </li></ul></ul><ul><ul><li>ただし同じキーのデータが大量になると分散に偏りが出やすいので注意が必要 </li></ul></ul>
  11. 11. ちなみに <ul><li>Google App Engine のデータストアの場合はプロパティに対してインデックスが作成可能 </li></ul><ul><li>特定のインデックスが付いたプロパティには範囲検索も可能 </li></ul><ul><li>将来的には HBase や Cassandra にもこのような二次インデックスの機能がつくようになるはず </li></ul>
  12. 12. まとめ <ul><li>KVSとRDBのデータモデルの違いを知る </li></ul><ul><ul><li>カラム指向と行指向 </li></ul></ul><ul><ul><li>Query-based modelとDomain-based model </li></ul></ul><ul><li>KVSのデータモデルを知る </li></ul><ul><ul><li>動的なカラム定義 </li></ul></ul><ul><ul><li>RDBとの違い </li></ul></ul><ul><li>データの物理配置とアクセス方法を知る </li></ul><ul><ul><li>ソートされたデータを範囲検索で取り出せるか </li></ul></ul><ul><ul><li>データの物理配置がモデリングに与える影響 </li></ul></ul>
  13. 13. 参考URL <ul><li>HBase/DataModel </li></ul><ul><ul><li>http:// wiki.apache.org/hadoop/Hbase/DataModel </li></ul></ul><ul><li>HBase の構造 ( 概要と DataModel) </li></ul><ul><ul><li>http://lunarium.info/arc/index.php/HBase%E3%81%AE%E6%A7%8B%E9%80%A0(%E6%A6%82%E8%A6%81%E3%81%A8DataModel) </li></ul></ul><ul><li>Cassandra Data Model </li></ul><ul><ul><li>http://www.slideshare.net/ebenhewitt/cassandra-datamodel-4985524 </li></ul></ul><ul><li>Cassandra データモデル入門 </li></ul><ul><ul><li>http://d.hatena.ne.jp/digitalsoul/20100628/1277681382 </li></ul></ul>

×