複合プライマリ・キーの使用

クエリーに対してソートされた結果を返すカラムを作成するには、複合プライマリ・キーを使用します。

クエリーに対してソートされた結果を返すカラムを作成するには、複合プライマリ・キーを使用します。プロ・サイクリングの例がリレーショナル・データベースで設計されている場合は、レースに対する外部キーを使用してサイクリスト・テーブルを作成します。Cassandraでは、分散システムでの結合は効率的ではないのでデータを非正規化します。後ほど、Cassandraのパフォーマンスを向上させるその他のスキーマを紹介します。コレクションとインデックスは、2つのデータ・モデリング方法です。この例では、レースのcategoryのタイプごとに、サイクリストのlast nameID、および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);
    注: categorypointsの組み合わせにより、cyclist_categoryテーブル内の行を一意に特定することができます。行にそれぞれ異なるpoints値が含まれている限り、同じcategoryの行が複数存在することができます。例をもう一度検討してください。このデータを格納するためのデータ・モデリングは最適ですか?どのような条件下でエラーが発生するでしょうか?