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

Is it possible to specify the WRITETIME in a Cassandra INSERT command?

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

我想解决这个问题的方法是让我自己指定 WRITETIME。据我所知,这在 thrift 中是可能的,但也许不是(即我们可以肯定地阅读它。)

所以像这样(模拟 TTL):

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

我面临的问题是覆盖相同的数据并且偶尔会忽略更新,因为它以相同甚至更旧的时间戳结束(可能是因为它被发送到不同的节点和时间每个节点的略有不同,并且由于 C++ 进程使用线程,因此可以在您无法控制的情况下发送 before/after...)

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

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

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

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