9

先週、Cassandraのクラッシュコースを受講し、Thrift APIからCQLに移行し、SuperColumnsを使用して、代わりにCompositeKeysを使用するべきではないことを学習しました。

現在CQL3を試していますが、スキーマで定義されていない列に挿入できなくなったか、スキーマでそれらの列を表示できなくなったようです。select *

CQL3でこれを有効にするためのオプションが不足していますか、それともスキーマ内のすべての列を定義することを期待していますか(幅が広く柔軟な行の目的を無効にします)。

4

4 に答える 4

6

はい、CQL3では、使用する前に列を宣言する必要があります。

ただし、必要な数のALTERを実行でき、ロックやパフォーマンスへの影響はありません。

そうは言っても、以前のC *バージョンで「動的列」を使用していた場所のほとんどは、C*1.2のマップによってより適切に提供されます。

于 2012-10-09T14:26:26.053 に答える
5

「WITHCOMPACTSTORAGE」を使用してコンポジットカラムを探索することをお勧めします。「COMPACTSTORAGE」列ファミリーを使用すると、実際にはキー列のみを定義できます。

例:

CREATE TABLE entity_cargo(entity_id ascii、item_id ascii、qt ascii、PRIMARY KEY(entity_id、item_id))WITH COMPACT STORAGE

実際、itemidとは異なる値を挿入する場合、entity_id、item_id、qtの行を追加するのではなく、名前(item_id content)と値(qt content)の列を追加します。それで:

entity_cargo(entity_id、item_id、qt)に挿入values(100、'oggetto 1'、3);

entity_cargo(entity_id、item_id、qt)に挿入values(100、'oggetto 2'、3);

次に、CQL3でこの行を表示する方法を示します。

cqlsh:goh_master> select * from entity_cargo where entity_id = 100;

entity_id | item_id | qt

----------- + ----------- + ----

  100 | oggetto 1 |  3

  100 | oggetto 2 |  3

そして、CLIからtnemをチェックするとどうなりますか?

[default @ goh_master] get entity_cargo [100];

=>(column = oggetto 1、value = 3、timestamp = 1349853780838000)

=>(column = oggetto 2、value = 3、timestamp = 1349853784172000)

2つの結果を返しました。

で単一の列にアクセスできます

select * from entity_cargo where entity_id = 100 and item_id ='oggetto 1';

それが役に立てば幸い

于 2012-10-10T07:27:47.093 に答える
2

Cassandraは引き続き幅の広い行を使用できます。この回答は、質問が行われた後に書かれたDataStaxブログエントリを参照しており、CQLと基盤となるアーキテクチャ間のリンクについて詳しく説明しています。

レガシーサポート

次のコマンドを使用してThriftを介して定義された動的列ファミリー(列固有のメタデータがないことに注意してください)。

create column family clicks
  with key_validation_class = UTF8Type
  and comparator = DateType
  and default_validation_class = UTF8Type

CQLの正確な同等物は次のとおりです。

CREATE TABLE clicks (
  key text,
  column1 timestamp,
  value text,
  PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE

これらのコマンドは両方とも、日付順にレコードを格納する広い行の列ファミリーを作成します。

CQLエクストラ

さらに、CQLは、行ID、列、および値の要素にラベルを割り当てて、何が格納されているかを示す機能を提供します。次の、CQLで同じ構造を定義する別の方法は、DataStaxの例でこの機能を強調しています。これは、Webサイトでのユーザーのクリックを時間順に保存するために使用される列ファミリーです。

CREATE TABLE clicks (
  user_id text,
  time timestamp,
  url text,
  PRIMARY KEY (user_id, time)
) WITH COMPACT STORAGE

ノート

  • CQLのテーブルは、常にThriftの列ファミリーにマップされます
  • CQLドライバーは、主キー定義の最初の要素を行キーとして使用します
  • 複合列は、CQLで定義できる追加の列を実装するために使用されます
  • WITH COMPACT STORAGEを使用すると、可能な列の数が固定されるため、新しいデザインにはお勧めしません。つまり、このようなテーブルでは、ALTER TABLE...ADDは使用できません。どうしても必要な場合を除いて、省略してください。
于 2014-01-15T14:35:21.073 に答える
0

興味深いことに、CQL3について私は知りませんでした。PlayOrmでは、これは定義する必要のある「部分的な」スキーマであり、selectのWHERE句では、部分的なスキーマで定義されたもののみを使用できますが、行のすべてのデータを返します。についてはわかりません....CQLも同じことをしているはずです:(今これを調べる必要があります。ありがとう、ディーン

于 2012-10-09T14:51:26.903 に答える