Cassandra错误地解释了查询

时间:2017-08-17 19:01:11

标签: cassandra

我有一个表X,其中包含二进制列a作为我的密钥。 这是一个非常大的表,包含大于10M的记录。当我运行此查询时,我看到以下响应:

Received warning (1 of 1) "Read 5000 live rows and 2004 tombstone cells for query SELECT * FROM db.X WHERE a = 086eb4bd16043dbb6bab843cf5c06895 LIMIT 5000 (see tombstone_warn_threshold)" for query "SELECT b AS col_b, c, d AS col_d, e AS col_e, f, g FROM X WHERE a > 0x086EB4BD16043DBB6BAB843CF5C06895"

我有非常严重的性能问题和我目前的猜测,因为Cassandra的这种误解(希望因为我的配置错误)

1 个答案:

答案 0 :(得分:0)

你会收到一个警告,因为你周围有太多的墓碑。

  

tombstone_warn_threshold       (默认值:1000)查询在警告之前可以扫描的最大墓碑数。

http://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configCassandra_yaml_r.html

如果更多的墓碑累积并且不会很快压缩,那么也会出现failure_threshold。

如果你删除了大量数据,就会发生这种情况 - 实际上一次删除就是写一个墓碑。您的查询限制为5000可能会从已删除的行中读取许多逻辑删除,这是一个严重的性能问题。

你可以发表你的表定义吗?还有你的用例?

当我尝试将cassanda用作队列或使用带有短ttl的ttl数据时,我看到了这种模式。第一个可能是cassandra的反模式,后者值得一看TimeWindowCompactionStrategy。