【问题标题】:Performance impact of Allow filtering on same partition query in cassandra允许在 cassandra 中对同一分区查询进行过滤的性能影响
【发布时间】:2017-03-22 16:59:15
【问题描述】:

我有这样的桌子。

CREATE TABLE posts (
topic text
country text,
bookmarked text,
id uuid,
PRIMARY KEY (topic,id)
);

使用允许过滤的单个分区上的第一个查询。

select * from posts where topic='cassandra' allow filtering;

在不允许过滤的情况下对单个分区进行第二次查询。

select * from posts where topic='cassandra';

我的问题是第一个查询和第二个查询之间的性能差异是什么?尽管我们从单个分区请求,但首先查询(允许过滤)会在过滤之前从所有分区获取结果。

谢谢。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    允许过滤将允许您在不指定分区键的情况下运行查询。但是如果你使用一个,它将只使用特定的分区。

    在这个具体的例子中,你应该看不出有什么不同。

    在我的测试表上运行两个查询并启用跟踪,在两个执行计划中都获得了单个分区:

     Executing single-partition query on table_name
    

    【讨论】:

    • 我检查了跟踪日志并认为它不会产生任何性能影响,但只是想确认一下。谢谢。
    【解决方案2】:

    当您使用分区键进行查询时,您不需要使用ALLOW FILTERING。所以你提到的两个查询不会有性能差异。

    对于 Cassandra 3.0 及更高版本,ALLOW FILTERING 可用于查询分区键以外的任何字段。例如,您可以运行如下查询:

    SELECT * FROM posts where country='Bangladesh';
    

    对于低于 3.0 的 Cassandra 版本,ALLOW FILTERING 只能用于主键。 尽管使用ALLOW FILTERING 进行查询并不明智。 因为,Cassandra 执行此查询的唯一方法是从表 posts 中检索所有行,然后过滤掉不具有 country 列请求值的行。 因此,您应该自担风险使用ALLOW FILTERING

    【讨论】:

    • 没错,我不需要允许过滤。但只是想知道如果我们给出该参数对性能的影响。
    猜你喜欢
    • 2021-09-10
    • 2016-08-14
    • 1970-01-01
    • 2020-07-19
    • 2020-12-22
    • 2017-07-23
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多