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)

现在我想做一个更新操作。准确地说,我想更新上面给出的特定行的“频率”值。由于 CQL3 不允许我直接更新主键部分;我必须先删除该条目,然后再插入。但问题是它不允许我使用非分区键列“持续时间”执行删除操作。例如,它不允许我执行此操作:

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

有谁知道解决这个问题?我真的很感激。

4

2 回答 2

2

听起来您的架构不适合您想要执行的操作。您应该从弄清楚要对数据执行的操作开始,然后设计一个支持它的模式。

如果您的架构不支持您想要做的事情,它永远不会成功。如果您更详细地描述您所做的工作,包括您需要执行的操作类型,也许我们可以帮助您设计更好的模式。

于 2013-07-12T11:57:18.930 回答
2

是时候重新考虑您的元模型了。尽量保持您的元模型灵活,以支持所有此类操作。换句话说,您的元模型的复合键组合应该具有处理此类删除或更新相关查询的灵活性。

现在来看你的例子,如果你想更新频率列,那么首先你必须删除具有该频率值的行,然后重新插入一个正确的组合。尝试使用您的复合键组合删除该行,例如在您的情况下,

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

然后你可以插入一个新的行。

于 2013-07-12T12:17:48.433 回答