在Cassandra中,如果我运行一个递增计数器的查询,那么从那个计数器中选择那个原子?

时间:2015-03-05 23:01:33

标签: cassandra counter cql unique-key

如果我运行一个递增计数器的查询,那么从那个计数器中选择那个原子?

我想使用Cassandra生成较小的(整数)数字。

使用量可能会产生少于1000 Ids /天,但肯定需要是非冲突的,并且更愿意浪费(未使用的数字块)。


我考虑了以下选项

  1. 我知道我可以做条件read+update,直到我得到一个成功的结果。
  2. 与#1类似,但使用10或100的块进行更新,然后使用该块在单独的服务中发布新ID。
  3. 为此目的完全使用单独的服务(sql支持?)。
  4. 我还使用UUID创建记录,我只想将序号用于公开发布的记录,并且将成为URL的一部分。

1 个答案:

答案 0 :(得分:6)

更新操作是原子操作,但是您不会将更新后的值作为操作的输出返回。 Update / Select组合绝对不是原子的。任何其他进程都可以在updateselect调用之间递增/递减计数器值,从而使您的结果无法预测。以下是计数器如何工作的良好描述:http://www.datastax.com/dev/blog/whats-new-in-cassandra-2-1-a-better-implementation-of-counters。尝试在Cassandra前面使用一些同步层来实现此操作的原子性。 Astyanax就是其中一个例子。