Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
RDB開発者のための
Apache Cassandra™
データモデリング入門
db tech showcase Tokyo 2017
森下 雄貴
スピーカー
森下 雄貴
(yuki@datastax.com)
- Solution Architect (ときどきSoftware Developer) @ DataStax
- Apache Cassandra™コミッター
DataStax
Enterprise
Apache Cassandraを
中核にした製品
+ サポート
+ プロフェッショナルサー
ビス
+ トレーニング
Apache Cassandraのおさらい
The Apache Cassandra database is the right choice
when you need scalability and high availability
without compromising per...
スケーラビリティ
• データはクラスター内のノードに分散されて格納される
• パフォーマンスとデータ容量両方でのリニアスケーラビリティ
50,000
trans/sec
500 GB
100,000
trans/sec
1 TB
200,000...
スケーラビリティ
• Cassandraはマスターレス
• ユーザーはどのデータセンターのどのノードに
でも読み書きできる。
• 運用もシンプル
• すべての書き込みは、自動的に等しくノード間に
分散され、クラスター内に複製される
10
50
3070
80
40
20
60
クライアント
ほかの2つのノードからデータ
を取得できる
一時的なノード障害
アベイラビリティ
• 単一障害点なし
• 高い耐障害性
• 自動レプリケーション
• スケールしても運用はシンプル
アベイラビリティ
• データセンター間レプリケーション
• データセンターやクラウドの
アベイラビリティゾーンを
またぐデータの複製
• どんな障害が起きても
ビジネスへの影響なし
• グローバルな低遅延パフォーマンス
10
50
3070
8...
Cassandraクエリ言語(CQL)
• RDBのSQLに似たシンタックス
• DDLによりオブジェクトを作成
• CREATE, INSERT, UPDATE,
DELETE, GRANT, REVOKE
• SELECT文で検索
• JO...
Cassandraデータモデリング
- 以上のような機能を実現するために、犠牲にしている機能もある
- どんなデータベースでもそうだが、適切なデータモデリングが性能に直結する
まずは用語の確認から
KEYSPACE
• トップレベルの名前空間
• テーブルなどのスキーマオブジェクトの集合
• レプリケーションの設定単位
CREATE KEYSPACE my_keyspace WITH WITH REPLICATION = {
'class...
TABLE
• RDBのテーブルに相当
• キースペースに属する
CREATE TABLE users (
user_id UUID,
first_name TEXT,
last_name TEXT,
PRIMARY KEY (user_id)...
プライマリーキー
• テーブルの中のレコードを一意に識別する
• 物理的なデータの配置を制御
• パーティションキーとクラスタリングカラム(オプション)で構成される
CREATE TABLE users (
user_id UUID,
firs...
CQLテーブルとストレージ
video_id name runtime year
1 Insurgent 144 2015
2 Interstellar 98 2014
3 Mockingjay 122 2014
パーティション
パーティション...
パーティションキー
• 物理的なパーティションを識別する
• 分散環境におけるデータの配置場所
• ディスク上のデータの場所
• プライマリーキーの最初の部分
• 複合パーティションキー
パーティションキー
• 実データがあるサーバーへのルーティングのためのキー
パーティションキー
• 複合パーティションキー
• 複数のカラムからパーティションキーを構成できる
PRIMARY KEY ((id, type))
• クエリー時はパーティションキーを構成するカラムをすべて検索条件に指定する必要がある
WHE...
クラスタリング
• パーティションをCQLテーブル内の各行に分割
• パーティション内はクラスタリングカラムでソートされている
データモデリングの流れ
KillrVideo
データモデリングの流れ
概念データ
モデル
アプリケー
ションワーク
フロー
マッピング
論理データ
モデル
最適化
物理データ
モデル
概念データモデル
• ドメインの抽象的なビュー
• 特定のテクノロジー/データベースによらない
• ERDを作成
アプリケーションワークフロー
- アプリケーションからのアクセスパターンから、どのようにデータへアクセスされる
かを知る
- 実行されるクエリーをあらかじめ知っておく
- Apache Cassandra™が得意なクエリパターンは決まっている
アプリケーションワークフロー
マッピング
概念データ
モデル
アプリケー
ションワーク
フロー
マッピング
論理データ
モデル
最適化
物理データ
モデル
ERDとクエリーに
マッピングルールとパターンを適用
論理データモデリングの成果物として
Chebotkoダイアグラム...
Chebotkoダイアグラム
Chebotkoダイアグラム
Chebotkoダイアグラム
Chebotkoダイアグラム
Chebotkoダイアグラム
Cassandraデータモデリングの原則
- データを知る
- クエリを知る
- 非正規化
- データをネストする
- データを重複して持つ
データを知る
• 概念データモデルが完成していること
• Cassandraではプライマリーキーの設計がスキーマデザインに影響する
• プライマリーキーはユニークで、行を一意に識別
• プライマリーキーにはどんな問い合わせを行いたいかによって、...
クエリを知る
- クエリがスキーマデザインを決める
- クエリの変更はスキーマの変更を伴う可能性が高い
- Apache Cassandra™が得意なアクセスパターンに落とす
- 単一パーティションへのクエリー ◎
- 少数のパーティションへの...
非正規化
- データをネストする
- 1つのパーティションに複数のエンティティを格納する
- 単一パーティションへのクエリーを実現
- 3つの方法
- クラスタリングカラム (一つのパーティションに複数の行を格納)
- コレクション型
- ユー...
非正規化
- クラスタリングカラム
- パーティションキーが親のエンティティを識別
- クラスタリングカラムの値が子のエンティティを識別
- クラスタリングカラムを増やすことで多階層のネストを実現
非正規化
- ユーザー定義型
- 1対1の関係にも利用できるが、コレクション型と合わせても利用できる
非正規化
- データを重複して持つ
- クライアントサイドJOINよりも重複して持つほうがスケールする
マッピングルール
- ルール1: エンティティとリレーション
- ルール2: 等号(=)を用いる検索
- ルール3: 不等号(>, <)を用いる検索
- ルール4: 順序
- ルール5: エンティティを識別するキー
マッピングルール
- ルール1: エンティティとリレーション
- エンティティやリレーションがテーブルにマッピングされる
- 各レコードがパーティションや行にマッピングされる
- ひとつのパーティションに複数のエンティティやリレーションが入るこ...
マッピングルール
- ルール2: 等号(=)を用いる検索
- プライマリーキーはパーティションキーとクラスタリングカラムで構成される
PRIMARY KEY ((partition_key1, partition_key2), clusteri...
マッピングルール
- ルール3: 不等号(>, <)を用いる検索
- 不等号(>,<)を用いて検索を行う属性(カラム)は、プライマリーキーの定義において、等号を用い
る属性の後に来る
- クエリ: 姓 = ? かつ 登録日時 > ?
マッピングルール
- ルール4: 順序
- 各パーティション内で、CQLの行はソートされている (昇順もしくは降順)
PRIMARY KEY ((partition_key1, partition_key2), clustering1, clu...
マッピングルール
- ルール5: エンティティを識別するキー
- プライマリーキーの定義には、エンティティを識別するキー属性を含まなければならない
最適化
概念データ
モデル
アプリケー
ションワーク
フロー
マッピング
論理データ
モデル
最適化
物理データ
モデル
最適化のポイント
- パーティションのサイズ
- パーティションの物理的なサイズの上限
- 読み込みパフォーマンスへの影響(削除を伴うと特に)
- パーティションを分割するような疑似カラムを導入して複合パーティションキーとして利用できる
か検討...
物理データモデル
- データサイズやアクセスパターンを考慮してデータモデルを最適化
- CQLの作成
CREATE TABLE comments_by_user (
user_id UUID,
posted_timestamp TIMESTAM...
まとめ
データモデリングのポイント
• クエリーをあらかじめ知る
• データは非正規化
• Apache Cassandraが得意なパターンに落とす
もっと詳しく!
- DSEダウンロードとフリーのオンライントレーニング
- 開発用途に無償利用可能
- DS220: Data Modeling(12時間)
- https://academy.datastax.com/
KillrVideoデ...
告知
Cassandra Summit Tokyo 2017
2017年10月5日(木) 10:00-
ベルサール東京日本橋
国内外のCassandraデベロッパーが集結!!!!
http://cassandra-jp.com/cst2017/...
RDB開発者のためのApache Cassandra データモデリング入門
Upcoming SlideShare
Loading in …5
×

RDB開発者のためのApache Cassandra データモデリング入門

1,920 views

Published on

DB Tech Showcase Tokyo 2017 セッション D34 発表資料

http://www.db-tech-showcase.com/dbts/tokyo

Published in: Technology

RDB開発者のためのApache Cassandra データモデリング入門

  1. 1. RDB開発者のための Apache Cassandra™ データモデリング入門 db tech showcase Tokyo 2017 森下 雄貴
  2. 2. スピーカー 森下 雄貴 (yuki@datastax.com) - Solution Architect (ときどきSoftware Developer) @ DataStax - Apache Cassandra™コミッター
  3. 3. DataStax Enterprise Apache Cassandraを 中核にした製品 + サポート + プロフェッショナルサー ビス + トレーニング
  4. 4. Apache Cassandraのおさらい
  5. 5. The Apache Cassandra database is the right choice when you need scalability and high availability without compromising performance.
  6. 6. スケーラビリティ • データはクラスター内のノードに分散されて格納される • パフォーマンスとデータ容量両方でのリニアスケーラビリティ 50,000 trans/sec 500 GB 100,000 trans/sec 1 TB 200,000 trans/sec 2 TB
  7. 7. スケーラビリティ • Cassandraはマスターレス • ユーザーはどのデータセンターのどのノードに でも読み書きできる。 • 運用もシンプル • すべての書き込みは、自動的に等しくノード間に 分散され、クラスター内に複製される
  8. 8. 10 50 3070 80 40 20 60 クライアント ほかの2つのノードからデータ を取得できる 一時的なノード障害 アベイラビリティ • 単一障害点なし • 高い耐障害性 • 自動レプリケーション • スケールしても運用はシンプル
  9. 9. アベイラビリティ • データセンター間レプリケーション • データセンターやクラウドの アベイラビリティゾーンを またぐデータの複製 • どんな障害が起きても ビジネスへの影響なし • グローバルな低遅延パフォーマンス 10 50 3070 80 40 20 60 Clie nt 15 55 3575 85 45 25 65 別のデータセンターデータセンター障害 10 50 3070 80 40 20 60 クライアント
  10. 10. Cassandraクエリ言語(CQL) • RDBのSQLに似たシンタックス • DDLによりオブジェクトを作成 • CREATE, INSERT, UPDATE, DELETE, GRANT, REVOKE • SELECT文で検索 • JOINはできない • INSERT, UPDATE, DELETE でデータ書き込み CQL CREATE TABLE market_prices ( symbol TEXT, date TIMESTAMP, price DECIMAL, side INT, PRIMARY KEY (symbol, date) ) WITH CLUSTERING ORDER BY (date DESC);
  11. 11. Cassandraデータモデリング - 以上のような機能を実現するために、犠牲にしている機能もある - どんなデータベースでもそうだが、適切なデータモデリングが性能に直結する
  12. 12. まずは用語の確認から
  13. 13. KEYSPACE • トップレベルの名前空間 • テーブルなどのスキーマオブジェクトの集合 • レプリケーションの設定単位 CREATE KEYSPACE my_keyspace WITH WITH REPLICATION = { 'class': 'SimpleStrategy', 'replication_factor' : 1 };
  14. 14. TABLE • RDBのテーブルに相当 • キースペースに属する CREATE TABLE users ( user_id UUID, first_name TEXT, last_name TEXT, PRIMARY KEY (user_id) );
  15. 15. プライマリーキー • テーブルの中のレコードを一意に識別する • 物理的なデータの配置を制御 • パーティションキーとクラスタリングカラム(オプション)で構成される CREATE TABLE users ( user_id UUID, first_name TEXT, last_name TEXT, PRIMARY KEY (user_id) );
  16. 16. CQLテーブルとストレージ video_id name runtime year 1 Insurgent 144 2015 2 Interstellar 98 2014 3 Mockingjay 122 2014 パーティション パーティションキー セル キー バリュー
  17. 17. パーティションキー • 物理的なパーティションを識別する • 分散環境におけるデータの配置場所 • ディスク上のデータの場所 • プライマリーキーの最初の部分 • 複合パーティションキー
  18. 18. パーティションキー • 実データがあるサーバーへのルーティングのためのキー
  19. 19. パーティションキー • 複合パーティションキー • 複数のカラムからパーティションキーを構成できる PRIMARY KEY ((id, type)) • クエリー時はパーティションキーを構成するカラムをすべて検索条件に指定する必要がある WHERE id = ? AND type = ?
  20. 20. クラスタリング • パーティションをCQLテーブル内の各行に分割 • パーティション内はクラスタリングカラムでソートされている
  21. 21. データモデリングの流れ
  22. 22. KillrVideo
  23. 23. データモデリングの流れ 概念データ モデル アプリケー ションワーク フロー マッピング 論理データ モデル 最適化 物理データ モデル
  24. 24. 概念データモデル • ドメインの抽象的なビュー • 特定のテクノロジー/データベースによらない • ERDを作成
  25. 25. アプリケーションワークフロー - アプリケーションからのアクセスパターンから、どのようにデータへアクセスされる かを知る - 実行されるクエリーをあらかじめ知っておく - Apache Cassandra™が得意なクエリパターンは決まっている
  26. 26. アプリケーションワークフロー
  27. 27. マッピング 概念データ モデル アプリケー ションワーク フロー マッピング 論理データ モデル 最適化 物理データ モデル ERDとクエリーに マッピングルールとパターンを適用 論理データモデリングの成果物として Chebotkoダイアグラムを作成
  28. 28. Chebotkoダイアグラム
  29. 29. Chebotkoダイアグラム
  30. 30. Chebotkoダイアグラム
  31. 31. Chebotkoダイアグラム
  32. 32. Chebotkoダイアグラム
  33. 33. Cassandraデータモデリングの原則 - データを知る - クエリを知る - 非正規化 - データをネストする - データを重複して持つ
  34. 34. データを知る • 概念データモデルが完成していること • Cassandraではプライマリーキーの設計がスキーマデザインに影響する • プライマリーキーはユニークで、行を一意に識別 • プライマリーキーにはどんな問い合わせを行いたいかによって、カラムが追加される
  35. 35. クエリを知る - クエリがスキーマデザインを決める - クエリの変更はスキーマの変更を伴う可能性が高い - Apache Cassandra™が得意なアクセスパターンに落とす - 単一パーティションへのクエリー ◎ - 少数のパーティションへのクエリー 〇 - テーブルスキャン × - 複数テーブルへのアクセス ×
  36. 36. 非正規化 - データをネストする - 1つのパーティションに複数のエンティティを格納する - 単一パーティションへのクエリーを実現 - 3つの方法 - クラスタリングカラム (一つのパーティションに複数の行を格納) - コレクション型 - ユーザー定義型(UDT)
  37. 37. 非正規化 - クラスタリングカラム - パーティションキーが親のエンティティを識別 - クラスタリングカラムの値が子のエンティティを識別 - クラスタリングカラムを増やすことで多階層のネストを実現
  38. 38. 非正規化 - ユーザー定義型 - 1対1の関係にも利用できるが、コレクション型と合わせても利用できる
  39. 39. 非正規化 - データを重複して持つ - クライアントサイドJOINよりも重複して持つほうがスケールする
  40. 40. マッピングルール - ルール1: エンティティとリレーション - ルール2: 等号(=)を用いる検索 - ルール3: 不等号(>, <)を用いる検索 - ルール4: 順序 - ルール5: エンティティを識別するキー
  41. 41. マッピングルール - ルール1: エンティティとリレーション - エンティティやリレーションがテーブルにマッピングされる - 各レコードがパーティションや行にマッピングされる - ひとつのパーティションに複数のエンティティやリレーションが入ることもある - 属性はテーブルのカラムにマッピングされる
  42. 42. マッピングルール - ルール2: 等号(=)を用いる検索 - プライマリーキーはパーティションキーとクラスタリングカラムで構成される PRIMARY KEY ((partition_key1, partition_key2), clustering1, clustering2, …) - 等号(=)を用いて検索を行う属性(カラム)がプライマリーキーの最初に来る
  43. 43. マッピングルール - ルール3: 不等号(>, <)を用いる検索 - 不等号(>,<)を用いて検索を行う属性(カラム)は、プライマリーキーの定義において、等号を用い る属性の後に来る - クエリ: 姓 = ? かつ 登録日時 > ?
  44. 44. マッピングルール - ルール4: 順序 - 各パーティション内で、CQLの行はソートされている (昇順もしくは降順) PRIMARY KEY ((partition_key1, partition_key2), clustering1, clustering2, …) CLUSTERING ORDER BY clustering 1 ASC, clustering2 DESC - クエリ: 姓 = ? かつ 登録日時 > ? で、登録日時の昇順
  45. 45. マッピングルール - ルール5: エンティティを識別するキー - プライマリーキーの定義には、エンティティを識別するキー属性を含まなければならない
  46. 46. 最適化 概念データ モデル アプリケー ションワーク フロー マッピング 論理データ モデル 最適化 物理データ モデル
  47. 47. 最適化のポイント - パーティションのサイズ - パーティションの物理的なサイズの上限 - 読み込みパフォーマンスへの影響(削除を伴うと特に) - パーティションを分割するような疑似カラムを導入して複合パーティションキーとして利用できる か検討する
  48. 48. 物理データモデル - データサイズやアクセスパターンを考慮してデータモデルを最適化 - CQLの作成 CREATE TABLE comments_by_user ( user_id UUID, posted_timestamp TIMESTAMP, video_id TIMEUUID, comment TEXT, title TEXT, type TEXT, tags SET<TEXT>, preview_thumbnails MAP<INT, BLOB>, PRIMARY KEY ((user_id), posted_timestamp, video_id) ) WITH CLUSTERING ORDER BY (posted_timestamp DESC, video_id ASC);
  49. 49. まとめ
  50. 50. データモデリングのポイント • クエリーをあらかじめ知る • データは非正規化 • Apache Cassandraが得意なパターンに落とす
  51. 51. もっと詳しく! - DSEダウンロードとフリーのオンライントレーニング - 開発用途に無償利用可能 - DS220: Data Modeling(12時間) - https://academy.datastax.com/ KillrVideoデモアプリケーション - https://killrvideo.github.io/
  52. 52. 告知 Cassandra Summit Tokyo 2017 2017年10月5日(木) 10:00- ベルサール東京日本橋 国内外のCassandraデベロッパーが集結!!!! http://cassandra-jp.com/cst2017/ja/

×