【发布时间】:2017-07-10 18:37:12
【问题描述】:
我有一个带有timestamp 列的表,我想操作该列的值。例如,我需要做一些事情:
UPDATE mytable SET datetimecolumn = datetimecolumn + 10mins
在 Apache Cassandra 中是如何完成的?
更新:答案似乎是“你不能”。但是选择的答案显然是我们能得到的最接近的答案。
【问题讨论】:
我有一个带有timestamp 列的表,我想操作该列的值。例如,我需要做一些事情:
UPDATE mytable SET datetimecolumn = datetimecolumn + 10mins
在 Apache Cassandra 中是如何完成的?
更新:答案似乎是“你不能”。但是选择的答案显然是我们能得到的最接近的答案。
【问题讨论】:
你可以查询类似的这个,只要数据类型是计数器。
使用计数器:
计数器是一个特殊的列,用于存储以增量方式更改的数字。例如,您可以使用计数器列来计算页面被查看的次数。
仅在专用表中定义计数器并使用计数器数据类型。您不能索引、删除或重新添加计数器列。表中的所有非计数器列都必须定义为主键的一部分。
例子:
CREATE TABLE mytable (
pk1 int PRIMARY KEY,
datetimecolumn counter
);
这里你必须使用以毫秒为单位的 datetimecolumn 值。
第一次,您必须使用以毫秒为单位的时间更新查询,比如说 1487686182403
UPDATE mytable SET datetimecolumn = datetimecolumn + 1487686182403 where pk1 = 1
现在 pk = 1 的 mytable 包含 datetimecolumn = 1487686182403 值。
如果您想将 datetimecolumn 增加 10 分钟(600000 毫秒)
UPDATE mytable SET datetimecolumn = datetimecolumn + 600000 where pk1 = 1
来源:https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html
【讨论】:
read-before-write 是 cassandra 中的一种反模式。您已在客户端操作该值并照常更新;
换句话说:您必须搜索(选择)值,进行更改(增加 10 分钟)并在 cassandra 更新新值。
【讨论】: