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