1

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

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

所以像这样(模拟TTL):

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

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

4

1 回答 1

3

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

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

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

在某些情况下,您可以覆盖时间戳的含义——这是我们过去用来做一些聪明的事情的诡计,比如先写获胜,甚至在 TIMESTAMP 字段中存储排行榜值,这样最高分就会保持不变,但是在尝试这些之前你应该真正理解这个概念(删除变得不平凡)

于 2016-07-04T06:16:22.627 回答