是否可以在Cassandra INSERT命令中指定WRITETIME?

时间:2016-07-03 01:46:01

标签: c++ cassandra-3.0

我遇到一个问题,当我的代码显然没有同时发送时,一些INSERT命令被视为在Cassandra端同时发送。 (当你在网络上遇到一点拥塞时,就会出现问题,否则一切正常。)

我在想什么可以解决这个问题,这是我能够自己指定WRITETIME的一种方式。根据我的记忆,这可能是节俭的,但也许不是(即我们可以肯定地阅读它。)

这样的事情(模拟TTL):

INSERT INTO table_name (a, b, c) VALUES (1, 2, 3) USING WRITETIME = 123;

我面临的问题是覆盖相同的数据,偶尔会忽略更新,因为它最终会得到相同甚至更旧的时间戳(可能是因为它被发送到不同的节点和时间每个节点略有不同,因为C ++进程使用线程,它可以在没有你控制的情况下发送/之后发送...)

1 个答案:

答案 0 :(得分:2)

您正在寻找的神奇语法是:

INSERT INTO tbl (col1, col2) VALUES (1,2) USING TIMESTAMP 123456789000

使用这种方法要非常谨慎 - 确保使用正确的单位(通常为微秒)。

在某些情况下,您可以覆盖时间戳的含义 - 这是我们过去用来做一些聪明的事情,比如第一次写入胜利,甚至是在TIMESTAMP字段中存储的排行榜值,这是最高的得分将被保留,但在尝试这些之前你应该真的理解这个概念(删除变得非常重要)