gpt4 book ai didi

Cassandra:插入较旧的时间戳

转载 作者:行者123 更新时间:2023-12-02 22:57:04 28 4
gpt4 key购买 nike

(Cassandra 2.0.9,使用 CQL)

我不小心更新了表中的一行,该行正在管理自己的时间戳(100 * 特定的序列号)。现在,因为我的时间戳是当前时间,所以所有更新都不起作用。我明白这是为什么,但我正在努力从中恢复。我很幸运,我可以删除这些行。

我已将 gc_grace_seconds 设置为 0 并运行 delete from table where key=primarykey 以删除行。之后,我在每个节点上使用 nodetoollushnodetoolcompact 来执行删除操作,并压缩和删除生成的逻辑删除。然后,我将 gc_grace_seconds 调回了 10 天,并尝试插入具有相同键但使用时间戳 1 的行。 p>

这行不通。只是想知道是否有人犯过类似的错误并解决了它?

最佳答案

我想我应该尝试一下这个练习。

aploetz@cqlsh:presentation> SELECT * FROm bladerunners WHERE id='B26354';
id | data | name | ts | type
--------+---------------------+--------------+--------------------------+--------------
B26354 | Filed and monitored | Rick Deckard | 2015-02-16 12:00:03-0600 | Blade Runner

(1 rows)

以下是使用 cassandra-cli 存储数据的方式:

[default@presentation] get bladerunners[B26354];
=> (name=, value=, timestamp=1427744637894310)
=> (name=data, value=46696c656420616e64206d6f6e69746f7265642e, timestamp=1427744637894310)
=> (name=name, value=5269636b204465636b617264, timestamp=1427744637894310)
=> (name=ts, value=0000014b938c09a2, timestamp=1427744637894310)
=> (name=type, value=426c6164652052756e6e6572, timestamp=1427744637894310)
Returned 5 results.
Elapsed time: 7.67 msec(s).

我现在将删除该行的data列,生成逻辑删除:

DELETE data FROM bladerunners WHERE id='B26354';

当我使用 tracing on 进行 SELECT 时,我可以看到该列显示“null”,并且那里有一个墓碑。

aploetz@cqlsh:presentation> SELECT * FROM bladerunners WHERe id='B26354';

id | data | name | ts | type
--------+------+--------------+--------------------------+--------------
B26354 | null | Rick Deckard | 2015-02-16 12:00:03-0600 | Blade Runner

...

Read 1 live and 1 tombstoned cells [SharedPool-Worker-2] | 2015-06-10 08:42:25.858000 | 192.168.23.129 | 2173

因此,我将把 bladerrunners 表的 gc_grace_seconds 设置为零:

ALTER TABLE bladerunners WITH gc_grace_seconds=0;

从 (Linux) 命令行,我将刷新并压缩我的 presentation 键空间:

aploetz@dockingBay94:/local/dsc-cassandra-2.1.4$ bin/nodetool flush
aploetz@dockingBay94:/local/dsc-cassandra-2.1.4$ bin/nodetool compact presentation

当我使用 tracing on 进行 SELECT 时,我可以看到 data 列仍然为“null”,但现在逻辑删除已经消失了。

我现在将重新插入时间戳为 1 的 data 列:

INSERT INTO bladerunners (id, data) VALUES ('B26354','Filed and monitored') USING TIMESTAMP 1;

当使用cassandra-cli查询时,我现在看到的是:

[default@presentation] get bladerunners[B26354];
=> (name=, value=, timestamp=1427744637894310)
=> (name=data, value=46696c656420616e64206d6f6e69746f726564, timestamp=1)
=> (name=name, value=5269636b204465636b617264, timestamp=1427744637894310)
=> (name=ts, value=0000014b938c09a2, timestamp=1427744637894310)
=> (name=type, value=426c6164652052756e6e6572, timestamp=1427744637894310)
Returned 5 results.
Elapsed time: 4.7 msec(s).

请注意,data 列现在的时间戳为 1。

尝试使用tracing on运行查询,看看您的墓碑是否真的消失了。另外,通过 cassandra-cli 检查您的表,看看时间戳是如何通过的。如果您需要对其中任何步骤进行澄清,请告诉我。

注意:我只是将冲洗/紧凑作为示例或练习的一部分进行展示。我不得不提一下,DataStax 建议用户尽可能避免手动运行nodetool compact

关于Cassandra:插入较旧的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743927/

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