在 Cassandra 中,如果我 运行 一个增加计数器的查询,那么从那个计数器中选择是原子的吗?
In Cassandra, if I run a query that increments a counter, then selects from that counter is that atomic?
如果我 运行 一个递增计数器的查询,那么从那个计数器中选择是原子的吗?
我想使用 Cassandra 生成更小的(整数)数字。
使用量可能会产生少于 1000 Ids/day,但绝对需要不冲突,并且希望浪费的可能性最小(未使用的数字块)。
我考虑过以下选项
- 我知道我可以做条件
read+update
直到我得到一个成功的结果。
- 与#1 类似,但使用 10 或 100 块进行更新,然后使用该块在单独的服务中发布新 ID。
- 为此目的完全使用单独的服务(sql 支持?)。
我还在创建记录时使用 UUID,我只想对公开发布的记录使用序号,并将成为 URL 的一部分。
更新操作是原子的,但是您不会将更新后的值作为操作的输出返回。 Update
/Select
组合绝对不是原子的。任何其他进程都可以在您的 update
和 select
调用之间 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 是示例之一。
如果我 运行 一个递增计数器的查询,那么从那个计数器中选择是原子的吗?
我想使用 Cassandra 生成更小的(整数)数字。
使用量可能会产生少于 1000 Ids/day,但绝对需要不冲突,并且希望浪费的可能性最小(未使用的数字块)。
我考虑过以下选项
- 我知道我可以做条件
read+update
直到我得到一个成功的结果。 - 与#1 类似,但使用 10 或 100 块进行更新,然后使用该块在单独的服务中发布新 ID。
- 为此目的完全使用单独的服务(sql 支持?)。
我还在创建记录时使用 UUID,我只想对公开发布的记录使用序号,并将成为 URL 的一部分。
更新操作是原子的,但是您不会将更新后的值作为操作的输出返回。 Update
/Select
组合绝对不是原子的。任何其他进程都可以在您的 update
和 select
调用之间 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 是示例之一。