gpt4 book ai didi

cassandra - 如何删除Cassandra中的记录?

转载 作者:行者123 更新时间:2023-12-02 22:52:34 24 4
gpt4 key购买 nike

我有一个这样的表:

CREATE TABLE mytable (
user_id int,
device_id ascii,
record_time timestamp,
timestamp timeuuid,
info_1 text,
info_2 int,
PRIMARY KEY (user_id, device_id, record_time, timestamp)
);

当我要求 Cassandra 删除一条记录(列族中的条目)时,如下所示:

DELETE from my_table where user_id = X and device_id = Y and record_time = Z and timestamp = XX;

它返回时没有错误,但是当我再次查询时记录仍然存在。现在,如果我尝试像这样删除整行:

DELETE from my_table where user_id = X

它起作用并删除整行,并且立即再次查询不会返回该行的任何更多数据。

我做错了什么?如何在 Cassandra 中删除记录?

谢谢

最佳答案

好吧,这是我对正在发生的事情的理论。您必须小心使用时间戳,因为它们会将数据存储精确到毫秒。但是,它们只会显示第二个数据。以此示例表为例:

aploetz@cqlsh:stackoverflow> SELECT id, datetime  FROM data;

id | datetime
--------+--------------------------
B25881 | 2015-02-16 12:00:03-0600
B26354 | 2015-02-16 12:00:03-0600

(2 rows)

datetime(时间戳类型)是相等的,对吗?不:

aploetz@cqlsh:stackoverflow> SELECT id, blobAsBigint(timestampAsBlob(datetime)),
datetime FROM data;

id | blobAsBigint(timestampAsBlob(datetime)) | datetime
--------+-----------------------------------------+--------------------------
B25881 | 1424109603000 | 2015-02-16 12:00:03-0600
B26354 | 1424109603234 | 2015-02-16 12:00:03-0600

(2 rows)

正如您所发现的,当您使用时间戳作为主键的一部分时,这会出现问题。您的时间戳存储的精度可能比它显示的精度更高。因此,如果您要成功删除该单行,则需要提供隐藏的精度。

无论如何,您有几个选择。首先,找到一种方法来确保您在 record_time 中输入的精度不会超过所需的精度。或者,您可以将 record_time 定义为 timeuuid。

这又是一个理论。我可能完全错了,但我见过人们这样做过几次。通常,当他们使用 dateof(now()) 插入时间戳数据时会发生这种情况,如下所示:

INSERT INTO table (key, time, data) VALUES (1,dateof(now()),'blah blah');

关于cassandra - 如何删除Cassandra中的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30779774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com