允许过滤对Cassandra的影响是什么?

时间:2018-04-02 14:43:25

标签: cassandra

据Cassandra官方博客称,ALLOW FILTERING非常低效。但是,如果出于某种原因必须使用此类查询,那么对使用Cassandra获取数据的其他应用程序会产生什么影响呢?只有忙于为我的查询获取行的线程会很慢,或者整个Cassandra会变慢,因此,从Cassandra获取数据的所有其他应用程序都会让它们的响应变慢吗?

1 个答案:

答案 0 :(得分:5)

它可能会影响整个节点。围绕它的一个问题是,您的一个限制为10的查询不仅会读取10条记录并返回,而是(可能)大量数据。可以进行有效的ALLOW FILTERING查询,例如spark驱动程序(每个令牌范围或分区内的令牌限制查询)可以执行。我强烈建议不要尝试它。它可能起初可行,但你的糟糕运营团队会诅咒你的名字。

对于更快的磁盘,obj分配,因为这是非节流的,将导致严重的 GC开销。这与使用队列或大量逻辑删除时遇到的问题非常类似,JVM构建和丢弃行超出垃圾收集器可以跟上的分配率而不会停顿(早期促销,cms中的碎片,分配峰值混乱) g1 younggen比率)。

如果是跨分区,就像使用正常范围查询一样,协调器将尝试估计它需要读取的范围以及它们以一些有限的并发性扇出的副本。它是一个粗略的估计,因为它只有自己的数据来推断,但是当数据被进一步过滤而不仅仅是"范围内的分区数量"它可能会出错和低估。最有可能的是,它会一次查询一个范围,如果不满足,则查询下一个副本集范围。对于vnodes,这可能是一个非常长的列表,并且顺序步行它们可能无法在超时内完成。幸运的是,这将主要影响一个查询,但它实际上仍然是从 1 查询中从群集中的每个副本集读取磁盘上的整个数据集。如果您以100 /秒的速度进行群集,那么群集可能会被冲洗掉。