DS201: Foundations of Apache Cassandra™ and DataStax Enterprise の学習記録です。
パーティション (Partition)
Cassandraにおけるパーティションは、データを分散して格納するための基本的な概念です。Cassandraのテーブルは、1つまたは複数のパーティションで構成されており、各パーティションは一意のパーティションキーによって識別されます。
パーティションキーは、データをクラスター内のどのノードに配置するかを決定するための基準となります。パーティションキーの値に基づいてデータが物理的に分散されるため、適切なパーティションキーの設計は、Cassandraのパフォーマンスとスケーラビリティに直結します。
PRIMARY KEY とパーティションキー
CQL(Cassandra Query Language)でテーブルを定義する際、PRIMARY KEY を指定します。このプライマリキーの最初の列がパーティションキーとなります。
例:
videos テーブルの定義例です。
| |
上記のテーブル定義では、PRIMARY KEY (video_id) と宣言されています。これにより、video_id 列がこのテーブルのパーティションキーとなります。
トークン (Token)
Cassandraは、パーティションキーのハッシュ値を計算し、そのハッシュ値(トークン)に基づいてデータをクラスター内のどのノードに配置するかを決定します。このプロセスは、パーティショナーによって管理されます。
token() 関数を使用すると、特定のパーティションキーのトークン値を確認できます。
| |
クエリ結果の最初の列 "system.token(video_id)" は、video_id のトークン値を表しています。このトークン値は、Cassandra内部で使用されるパーティションキーのハッシュ値であり、データがどのノードに配置されるかを決定するために使われます。
適切なパーティションキーの設計
適切なパーティションキーの設計は、Cassandraの性能を最大限に引き出す上で非常に重要です。
- 均等なデータ分散: データがクラスター全体に均等に分散されるように、カーディナリティ(値の種類)が高く、アクセスパターンが均一な列をパーティションキーに選ぶべきです。
- ホットスポットの回避: 特定のパーティションにアクセスが集中する「ホットスポット」を避けるように設計する必要があります。
- クエリの効率: ほとんどのクエリはパーティションキーを指定して行われるため、クエリパターンを考慮してパーティションキーを決定します。