2

CQL3 を使用して作成された次の列ファミリーがあるとします。

    CREATE TABLE users (
        id text,
        freq int,
        duration bigint,
        PRIMARY KEY (id, freq)
    )with clustering order by (freq desc);

私はそれにいくつかのデータを挿入しました。

    Row(id=u'key', freq=3, duration=1)
    Row(id=u'key', freq=4, duration=2)
    Row(id=u'key', freq=5, duration=4)
    Row(id=u'key', freq=6, duration=6)

今、私は更新操作をしたいです。正確には、上記の特定の行の「freq」値を更新したいと思います。CQL3 では、主キー部分を直接更新することはできません。最初にそのエントリを削除してから、もう一度挿入する必要があります。しかし、問題は、非パーティション キー列「期間」を使用して削除操作を実行できないことです。たとえば、この操作を実行することはできません:

    Delete from users where id ='key' and duration =1;

これを回避する方法を知っている人はいますか? 私は本当にこれを感謝します。

4

2 に答える 2

2

あなたのスキーマは、あなたがやりたい操作の種類に合わないようです。データに対して実行する操作を理解することから始めて、それをサポートするスキーマを設計する必要があります。

スキーマがやりたいことをサポートしていなければ、うまくいきません。実行する必要がある操作の種類を含め、何をするのかをより詳細に説明していただければ、より良いスキーマを設計するお手伝いができるかもしれません。

于 2013-07-12T11:57:18.930 に答える
2

メタモデルを再考する時が来ました。このようなすべての操作をサポートできるように、メタ モデルをできるだけ柔軟に保つようにしてください。つまり、メタ モデルの複合キーの組み合わせには、そのような削除または更新関連のクエリを処理する柔軟性が必要です。

freq列を更新する場合は、まずその freq 値を持つ行を削除してから、適切な組み合わせを再挿入する必要があります。あなたのケースでは、複合キーの組み合わせを使用して行を削除してみてください。

delete from users where id ='key' AND freq= 3

そして、新しい行を挿入できます。

于 2013-07-12T12:17:48.433 に答える