【问题标题】:Cassandra remove row keys after deletionCassandra 删除后删除行键
【发布时间】:2015-03-01 01:27:35
【问题描述】:

我们的生产中有一个 5 节点的 cassandra 集群。全部运行 Cassandra 2.0.6。 集群将用户交互存储在列族的页面中。数据模型看起来像

Row Key:
20140101:http://example.com/myurlpath?myquery=1

Columns:
Counters
X:Y:Type => Counter Value

因为它是一种数据点流。我们有一个单独的 cron 主动删除超过 n 周的行 [删除所有列]。尽管我们的删除 cron 清空了旧行。行键仍然保留在我们的系统中[例如:仍然有一个时间戳为 20130517 的行键]。

我检查了 SO 帖子 herehere 还有 cassandra forum 答案没有明确的解决方案。我了解分布式删除和墓碑。但是这个行键问题对我来说仍然是一个神话。

我尝试强制进行重大压缩和清理,但没有任何改变。由于我们的 cassandra 集群使用的内存不断增加,因为我们的行键大小很高 [平均 120B]。

我们让列族的 gc_grace 设置保持默认的 10 天。如果这是问题,至少我们不应该看到超过一年[非常频繁出现]的行键最多一两个月就可以了。

我们应该如何管理 cassandra 中的行键删除?

【问题讨论】:

  • 检查所有节点的日期时间..我遇到了同样的错误,在我的情况下所有节点都有不同的日期时间

标签: cassandra-2.0


【解决方案1】:

使用 Cassandra 的 NodeTool 实用命令行界面来管理集群。

命令行界面:

1:CD C:\Program Files\DataStax Community\apache-cassandra\bin

2:nodetool -h localhost flush KeySpace Table

等待 2-3 分钟。神奇的等待

nodetool -h localhost compact KeySpace Table

【讨论】:

  • 这不就是为了清除cassandra柱子里的墓碑吗?
  • 不,它也会删除行键。您必须在刷新和压缩操作之间等待。
【解决方案2】:

我正在使用 nodetool 来维护我的 Cassandra 服务器。这对我来说可以。为此,您需要使用冲洗、清理和修复实用程序。您必须编写 shell 脚本并使用 cronjob 执行脚本。

#!/usr/bin/env bash
. /etc/rc.d/init.d/functions
nodetool flush [keyspace] [cfnames]
nodetool invalidatekeycache [keyspace] [cfnames]
nodetool invalidaterowcache [keyspace] [cfnames]
nodetool scrub [keyspace] [cfnames]
nodetool repair [keyspace] [cfnames]
nodetool cleanup [keyspace] [cfnames]
nodetool compact [keyspace] [cfnames]

参考链接为:NodeTool

【讨论】:

    【解决方案3】:

    http://www.slideshare.net/planetcassandra/8-axel-liljencrantz-23204252

    正如上面的演示文稿所说,如果行键存在于多个 sstable 中,cassandra 不会删除它。尽管为了相同的目的而存在压缩过程,但总有可能不会发生这种情况 [来自幻灯片 35]。

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 2014-02-03
      • 2012-07-16
      • 1970-01-01
      • 2020-12-11
      • 2016-10-18
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      相关资源
      最近更新 更多