【发布时间】:2020-09-30 20:52:09
【问题描述】:
我和我的同事被扔进了一个没有介绍就使用 Cassandra 的项目。 好吧,让我们开始吧!
SELECT * FROM reports WHERE timestamp < '2019-01-01 00:00:00' ALLOW FILTERING;
Error: 1300
显然,我们的墓碑太多了。那是什么?
墓碑是由于性能原因尚未删除的已删除数据。
墓碑应在gc_grace_period 过期之前用nodetool repair 删除,默认为10 天。
现在,这个项目已经有 7 年的历史了,似乎没有运行 repair 的工作。
根据默认警告和错误值,1K 墓碑很多。我们发现大约 1.4M。
我们使用Tracing on 测量了墓碑的数量,运行了一个 SELECT 查询,并累积了报告的墓碑。
我们尝试运行nodetool repair --full -pr -j 4,但得到Validation failed in /10.0.3.1。
DataStax's guide to repairing repairs 希望我们用nodetool scrub 修复验证错误。
但是之后我们仍然会遇到同样的错误。
然后,指南希望我们运行 sstablescrub,但由于内存不足异常而失败。
回到我们2019年之前删除数据的原始问题,我们尝试运行DELETE FROM reports WHERE timestamp < '2019-01-01 00:00:00'。
但是,timestamp 不是我们的分区键,所以我们不允许像这样删除数据,这也得到了许多其他 StackOverflow 帖子和 Jira 上的 DataStax 问题的证实。
每篇文章都提到我们应该“只是”改变 Cassandra 数据库的模式以适应我们的查询。
首先,我们只需要这样做一次;其次,我们的客户希望尽快删除这些数据。
- 有没有一种方法可以轻松更改 Cassandra 数据库的架构?
- 有没有一种方法可以让我们制定一个至少有效的缓慢解决方案?
总而言之,我们是 Cassandra 的新手,我们不确定如何继续。
我们想要的是
- 删除 2019 年之前的所有数据并确认已删除
- 有稳定的选择,避免错误 1300
你能帮忙吗?
如果有必要知道的话,我们有 4 个节点在 Azure 上的 Docker 中运行。 Cassandra的版本是3.11.6。
【问题讨论】:
-
什么是 Cassandra 版本?
-
Cassandra的版本是3.11.6。