我在Cassandra有一张表'评论',如下所述:
CREATE TABLE reviews (
review_id text,
downcount int,
upcount int,
creation_date timestamp,
PRIMARY KEY (review_id)
)
Run Code Online (Sandbox Code Playgroud)
可以说我想将upcount值增加1,我怎么能在Cassandra CQL中做到这一点?
当我做:
UPDATE reviews SET upcount = upcount +1 WHERE review_id = '123456';
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
错误请求:
upcount = upcount + 1非计数器列的操作()无效upcount.
cev*_*ris 21
您可以使用Cassandra的计数器列数据类型.请记住,如果非计数器列不是复合列的一部分,则不能将计数器列与非计数器列混合在同一列族中PRIMARY KEY.所以你必须将计数器分成另一个列族reviews_counts.
CREATE TABLE reviews (
review_id text,
creation_date timestamp,
PRIMARY KEY (review_id)
)
CREATE TABLE reviews_counts (
review_id text,
downcount counter,
upcount counter,
PRIMARY KEY (review_id)
)
Run Code Online (Sandbox Code Playgroud)
现在增量语句应该有效.
UPDATE keyspace.reviews_counts
SET upcount = upcount + 1
WHERE review_id = '123456'
Run Code Online (Sandbox Code Playgroud)
这里有一些关于Cassandra计数器列的文档. http://www.datastax.com/documentation/cql/3.0/cql/cql_using/use_counter_t.html
你不能这样做.您必须阅读该列,更新应用程序端的值并分配更新的值.正如错误所示,只有计数器列支持cassandra中的此功能.
理由很简单.计数器跨分布式节点同步.由于cassandra确保最终的一致性,非计数器列上的更新可能会在服务器端创建竞争条件.
| 归档时间: |
|
| 查看次数: |
9005 次 |
| 最近记录: |