【发布时间】:2017-04-18 20:20:37
【问题描述】:
我正在学习 Cassandra。我正在为特定用例建模 cassandra 表。下面描述的用例 -
用户可以写帖子。 其他用户可以回复帖子。 用户还可以对帖子“投赞成票”或“投反对票”。 用户按日期或赞成票或反对票对帖子进行排序。
这是我的表定义 -
CREATE TABLE post.comments_by_post (
postid text,
parentpostid text,
createdon bigint,
username text,
userid text,
displayname text,
upvotes int,
downvotes int,
comment text,
PRIMARY KEY ((postid, parentpostid), createdon)
) WITH CLUSTERING ORDER BY (createdon DESC);
为了增加“upvote”,我有一个更新查询 -
UPDATE post.comments_by_post SET upvotes = incrementedValue where postid=1 and parentpostid = 2 ;
incrementedValue 是在前一个值中加 1 计算得出的。
incrementedValue = previousValue + 1
我的问题是,如果我必须根据表中的前一个值计算增量,这将导致竞争条件和数据损坏。
我们有更好的方法吗?
我知道cassandra有counter列定义类型,可以用于这样的增量值,但是需要额外的表。计数器列不能与不属于主键的普通列一起使用。
【问题讨论】:
标签: cassandra race-condition cassandra-2.0