1

Cassandra0.8.2を使用しています

「値のない列」の手法を使用して、cassandraスキーマを設定しようとしています。値のない列の背後にある考え方は次のとおりです。列の名前が関連情報になり、「名前/値」ペアの値が空になります。これは、クエリを高速化するために使用されます-非正規化の例です。列の名前をバックリンクのURLにします。行キーは、バックリンクのターゲットURLのUUIDです。これは良いアイデア/スキーマデザインでもありますか?

私は非常に基本的な例を使用して、質問の要点を理解しています。Cassandra-Cliを使用して設定したものは次のとおりです。

create column family ArticleBackLinks 
with comparator = UTF8Type
and key_validation_class = UTF8Type
and default_validation_class = UTF8Type
and column_metadata = 
[
{column_name: www.arstechnica.com, validation_class: UTF8Type},        
{column_name: www.apple.com, validation_class:UTF8Type},         
{column_name: www.cnn.com, validation_class: UTF8Type},      
{column_name: www.stackoverflow.com, validation_class: UTF8Type}, 
{column_name: www.reddit.com, validation_class: UTF8Type}
];

エラーが発生します:

Command not found: `create column family ArticleBackLink...

私のエラーは、column_nameで使用している期間が原因だと思います。要するに、カサンドラで「価値のない列」のアイデアを使用するためのより良い方法に出くわした人がいるかどうか知りたいのですが。価値のないカラムテクニックの良い/良い例はありますか?私の考えは、価値のない列の手法を使用する正しい方法でさえありますか?

よろしくお願いします。

4

1 に答える 1

2

dotカサンドラはでcolumn_name、次の作品が好きではないと思います

[default@stackoverflow] create column family ArticleBackLinks with
...     comparator = UTF8Type and
...     default_validation_class = UTF8Type and
...     column_metadata =
...     [
...     {column_name: 'www.arstechnica.com', validation_class: UTF8Type},
...     {column_name: 'www.apple.com', validation_class:UTF8Type},
...     {column_name: 'www.cnn.com', validation_class: UTF8Type},
...     {column_name: 'www.stackoverflow.com', validation_class: UTF8Type},
...     {column_name: 'www.reddit.com', validation_class: UTF8Type}
...     ];
881b31f0-bc64-11e0-0000-242d50cf1ff7
Waiting for schema agreement...
... schemas agree across the cluster

ちなみに、Cassandra 0.8.2を使用しているので、CQLを活用する必要があります

したがって、このようなステートメントは将来的に役立ちます

UPDATE <COLUMN FAMILY> [USING <CONSISTENCY> 
[AND TIMESTAMP <timestamp>] [AND TTL <timeToLive>]] 
SET name1 = value1, name2 = value2 WHERE <KEY> = keyname;

これを参照してください


更新: コメントの質問に応じてさらに考えを追加

グループ化された情報を1か所に保管することをお勧めします。これにより、Cassandraが提供する効率が向上します。

たとえば、あなたのケースはcategoryRowKeyとして持つことができ、URLはcolumn_nameです。したがって、フロントエンドでは、分類されたビューをすばやく表示できます。これは、それを知ってarstechniciaおり、rowKeyであるグループstackoverflowの下にあるためです。technologyデータを挿入するときに、少し余分な作業が追加されます。

私はCassandra0.6.xを使用しているので、残念ながら、Cassandra0.7.0+がサポートするセカンダリインデックスについて多くを語ることはできません。categoryしかし、おそらく、インデックスが保持されているメインCFに列say、を追加し、ArticleBackLinkCQLを使用してクエリを実行することで、上記で説明したことを実現できますselect... where...

新しい'インデックスCF`を持つ必要性をなくすかもしれないセカンダリインデックスを調べるかもしれません。あなたはこれらを調べたいと思うかもしれません:

  • Cassandra0.7のセカンダリインデックス
  • Cassandra Wiki FAQ

    Q:セカンダリインデックスを作成することと、「users_by_country」などの「インデックス」CFを手動で作成することには違いがありますか?

    A:はい。まず、独自のインデックスを作成するときに、ノードが別のノードによって保持されているデータにインデックスを付ける場合があります。第二に、インデックスとデータの更新はアトミックではありません。

于 2011-08-01T17:35:39.303 に答える