クエリーに対してソートされた結果を返すカラムを作成するには、複合プライマリ・キーを使用します。
クエリーに対してソートされた結果を返すカラムを作成するには、複合プライマリ・キーを使用します。プロ・サイクリングの例がリレーショナル・データベースで設計されている場合は、レースに対する外部キーを使用してサイクリスト・テーブルを作成します。Cassandraでは、分散システムでの結合は効率的ではないのでデータを非正規化します。後ほど、Cassandraのパフォーマンスを向上させるその他のスキーマを紹介します。コレクションとインデックスは、2つのデータ・モデリング方法です。この例では、レースのcategoryのタイプごとに、サイクリストのlast name、ID、およびpointsを格納するcyclist_categoryテーブルを作成します。テーブルは、パーティション・キーにcategoryを使用し、1つのクラスター化カラムにpointsを使用します。このテーブルをクエリーして、pointsでソートしたカテゴリー内のサイクリストのリストとそれらのpointsを取得できます。
複合プライマリ・キー・テーブルは、次に示すように2通りの異なる方法で作成できます。
手順
-
複合プライマリ・キーを持つテーブルを作成するには、複数のカラムをプライマリ・キーとして使用します。この例では、追加の句
WITH CLUSTERING ORDER BY
を使用してポイントを降順に並べます。格納するには昇順の方が効率的ですが、ストレージ・エンジンの性質上、降順のクエリーの方がより迅速に実行できます。
cqlsh> USE cycling; CREATE TABLE cyclist_category ( category text, points int, id UUID, lastname text, PRIMARY KEY (category, points) ) WITH CLUSTERING ORDER BY (points DESC);
-
USE
文の代わりに、CREATE TABLE
文でキースペース名を使用してキースペースを識別することができます。
cqlsh> CREATE TABLE cyclist_category ( category text, points int, id UUID, lastname text, PRIMARY KEY (category, points) ) WITH CLUSTERING ORDER BY (points DESC);
注: categoryとpointsの組み合わせにより、cyclist_categoryテーブル内の行を一意に特定することができます。行にそれぞれ異なるpoints値が含まれている限り、同じcategoryの行が複数存在することができます。例をもう一度検討してください。このデータを格納するためのデータ・モデリングは最適ですか?どのような条件下でエラーが発生するでしょうか?