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

Tra*_*er1 5 counter cql unique-key cassandra

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

我想用Cassandra生成更小(整数)的数字.

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


我考虑过以下选项

  1. 我知道我可以做有条件的,read+update直到我得到一个成功的结果.
  2. 与#1类似,但使用10或100的块进行更新,然后使用该块在单独的服务中发布新的ID.
  3. 为此目的,完全使用单独的服务(sql支持?).

我也使用UUID来创建记录,我只想将序列号用于公开发布的记录,并且将成为URL的一部分.

Rom*_*kin 6

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