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

In Cassandra, if I run a query that increments a counter, then selects from that counter is that atomic?

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

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

使用量可能会产生少于 1000 Ids/day,但绝对需要不冲突,并且希望浪费的可能性最小(未使用的数字块)。


我考虑过以下选项

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

我还在创建记录时使用 UUID,我只想对公开发布的记录使用序号,并将成为 URL 的一部分。

更新操作是原子的,但是您不会将更新后的值作为操作的输出返回。 Update/Select 组合绝对不是原子的。任何其他进程都可以在您的 updateselect 调用之间 increment/decrement 计数器值,因此使您的结果不可预测。这里很好地描述了计数器的工作原理:http://www.datastax.com/dev/blog/whats-new-in-cassandra-2-1-a-better-implementation-of-counters. Try to use some synchronization layer in front of Cassandra to accomplish atomicity of this operation. Astyanax 是示例之一。