rdb開発者のためのapache cassandra データモデリング入門

53
RDB開発者のための Apache Cassandraデータモデリング入門 db tech showcase Tokyo 2017 森下 雄貴

Upload: yuki-morishita

Post on 21-Jan-2018

751 views

Category:

Technology


0 download

TRANSCRIPT

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

RDB開発者のための

Apache Cassandra™データモデリング入門

db tech showcase Tokyo 2017

森下雄貴

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

スピーカー

森下雄貴([email protected])

- Solution Architect (ときどきSoftware Developer) @ DataStax

- Apache Cassandra™コミッター

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

DataStax Enterprise

Apache Cassandraを中核にした製品

+ サポート

+ プロフェッショナルサービス

+ トレーニング

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

Apache Cassandraのおさらい

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

The Apache Cassandra database is the right choice

when you need scalability and high availabilitywithout compromising performance.

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

スケーラビリティ

• データはクラスター内のノードに分散されて格納される

• パフォーマンスとデータ容量両方でのリニアスケーラビリティ

50,000

trans/sec

500 GB

100,000

trans/sec

1 TB

200,000

trans/sec

2 TB

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

スケーラビリティ

• Cassandraはマスターレス

• ユーザーはどのデータセンターのどのノードにでも読み書きできる。

• 運用もシンプル

• すべての書き込みは、自動的に等しくノード間に分散され、クラスター内に複製される

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

10

50

3070

80

40

20

60

クライアント

ほかの2つのノードからデータを取得できる

一時的なノード障害

アベイラビリティ

• 単一障害点なし

• 高い耐障害性

• 自動レプリケーション

• スケールしても運用はシンプル

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

アベイラビリティ

• データセンター間レプリケーション

• データセンターやクラウドのアベイラビリティゾーンをまたぐデータの複製

• どんな障害が起きてもビジネスへの影響なし

• グローバルな低遅延パフォーマンス

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 データモデリング入門

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 データモデリング入門

Cassandraデータモデリング

- 以上のような機能を実現するために、犠牲にしている機能もある

- どんなデータベースでもそうだが、適切なデータモデリングが性能に直結する

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

まずは用語の確認から

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

KEYSPACE

• トップレベルの名前空間

• テーブルなどのスキーマオブジェクトの集合

• レプリケーションの設定単位

CREATE KEYSPACE my_keyspace WITH WITH REPLICATION = {'class': 'SimpleStrategy','replication_factor' : 1

};

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

TABLE

• RDBのテーブルに相当

• キースペースに属する

CREATE TABLE users (user_id UUID,first_name TEXT,last_name TEXT,PRIMARY KEY (user_id)

);

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

プライマリーキー

• テーブルの中のレコードを一意に識別する

• 物理的なデータの配置を制御

• パーティションキーとクラスタリングカラム(オプション)で構成される

CREATE TABLE users (user_id UUID,first_name TEXT,last_name TEXT,PRIMARY KEY (user_id)

);

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

CQLテーブルとストレージ

video_id name runtime year

1 Insurgent 144 2015

2 Interstellar 98 2014

3 Mockingjay 122 2014

パーティション

パーティションキー

セル

キー

バリュー

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

パーティションキー

• 物理的なパーティションを識別する

• 分散環境におけるデータの配置場所

• ディスク上のデータの場所

• プライマリーキーの最初の部分

• 複合パーティションキー

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

パーティションキー

• 実データがあるサーバーへのルーティングのためのキー

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

パーティションキー

• 複合パーティションキー

• 複数のカラムからパーティションキーを構成できる

PRIMARY KEY ((id, type))

• クエリー時はパーティションキーを構成するカラムをすべて検索条件に指定する必要がある

WHERE id = ? AND type = ?

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

クラスタリング

• パーティションをCQLテーブル内の各行に分割

• パーティション内はクラスタリングカラムでソートされている

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

データモデリングの流れ

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

KillrVideo

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

データモデリングの流れ

概念データモデル

アプリケーションワークフロー

マッピング論理データモデル

最適化物理データモデル

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

概念データモデル

• ドメインの抽象的なビュー

• 特定のテクノロジー/データベースによらない

• ERDを作成

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

アプリケーションワークフロー

- アプリケーションからのアクセスパターンから、どのようにデータへアクセスされるかを知る

- 実行されるクエリーをあらかじめ知っておく

- Apache Cassandra™が得意なクエリパターンは決まっている

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

アプリケーションワークフロー

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

マッピング

概念データモデル

アプリケーションワークフロー

マッピング論理データモデル

最適化物理データモデル

ERDとクエリーにマッピングルールとパターンを適用

論理データモデリングの成果物としてChebotkoダイアグラムを作成

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

Chebotkoダイアグラム

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

Chebotkoダイアグラム

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

Chebotkoダイアグラム

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

Chebotkoダイアグラム

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

Chebotkoダイアグラム

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

Cassandraデータモデリングの原則

- データを知る

- クエリを知る

- 非正規化

- データをネストする

- データを重複して持つ

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

データを知る

• 概念データモデルが完成していること

• Cassandraではプライマリーキーの設計がスキーマデザインに影響する

• プライマリーキーはユニークで、行を一意に識別

• プライマリーキーにはどんな問い合わせを行いたいかによって、カラムが追加される

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

クエリを知る

- クエリがスキーマデザインを決める

- クエリの変更はスキーマの変更を伴う可能性が高い

- Apache Cassandra™が得意なアクセスパターンに落とす

- 単一パーティションへのクエリー◎

- 少数のパーティションへのクエリー〇

- テーブルスキャン×

- 複数テーブルへのアクセス×

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

非正規化

- データをネストする

- 1つのパーティションに複数のエンティティを格納する

- 単一パーティションへのクエリーを実現

- 3つの方法

- クラスタリングカラム (一つのパーティションに複数の行を格納)

- コレクション型

- ユーザー定義型(UDT)

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

非正規化

- クラスタリングカラム

- パーティションキーが親のエンティティを識別

- クラスタリングカラムの値が子のエンティティを識別

- クラスタリングカラムを増やすことで多階層のネストを実現

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

非正規化

- ユーザー定義型

- 1対1の関係にも利用できるが、コレクション型と合わせても利用できる

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

非正規化

- データを重複して持つ

- クライアントサイドJOINよりも重複して持つほうがスケールする

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

マッピングルール

- ルール1: エンティティとリレーション

- ルール2: 等号(=)を用いる検索

- ルール3: 不等号(>, <)を用いる検索

- ルール4: 順序

- ルール5: エンティティを識別するキー

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

マッピングルール

- ルール1: エンティティとリレーション

- エンティティやリレーションがテーブルにマッピングされる

- 各レコードがパーティションや行にマッピングされる

- ひとつのパーティションに複数のエンティティやリレーションが入ることもある

- 属性はテーブルのカラムにマッピングされる

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

マッピングルール

- ルール2: 等号(=)を用いる検索

- プライマリーキーはパーティションキーとクラスタリングカラムで構成される

PRIMARY KEY ((partition_key1, partition_key2), clustering1, clustering2, …)

- 等号(=)を用いて検索を行う属性(カラム)がプライマリーキーの最初に来る

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

マッピングルール

- ルール3: 不等号(>, <)を用いる検索

- 不等号(>,<)を用いて検索を行う属性(カラム)は、プライマリーキーの定義において、等号を用いる属性の後に来る

- クエリ: 姓 = ? かつ登録日時 > ?

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

マッピングルール

- ルール4: 順序

- 各パーティション内で、CQLの行はソートされている (昇順もしくは降順)

PRIMARY KEY ((partition_key1, partition_key2), clustering1, clustering2, …)CLUSTERING ORDER BY clustering 1 ASC, clustering2 DESC

- クエリ: 姓 = ? かつ登録日時 > ? で、登録日時の昇順

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

マッピングルール

- ルール5: エンティティを識別するキー

- プライマリーキーの定義には、エンティティを識別するキー属性を含まなければならない

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

最適化

概念データモデル

アプリケーションワークフロー

マッピング論理データモデル

最適化物理データモデル

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

最適化のポイント

- パーティションのサイズ

- パーティションの物理的なサイズの上限

- 読み込みパフォーマンスへの影響(削除を伴うと特に)

- パーティションを分割するような疑似カラムを導入して複合パーティションキーとして利用できるか検討する

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

物理データモデル

- データサイズやアクセスパターンを考慮してデータモデルを最適化

- 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 データモデリング入門

まとめ

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

データモデリングのポイント

• クエリーをあらかじめ知る

• データは非正規化

• Apache Cassandraが得意なパターンに落とす

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

もっと詳しく!

- DSEダウンロードとフリーのオンライントレーニング

- 開発用途に無償利用可能

- DS220: Data Modeling(12時間)

- https://academy.datastax.com/

KillrVideoデモアプリケーション

- https://killrvideo.github.io/

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

告知

Cassandra Summit Tokyo 2017

2017年10月5日(木) 10:00-

ベルサール東京日本橋

国内外のCassandraデベロッパーが集結!!!!

http://cassandra-jp.com/cst2017/ja/