gpt4 book ai didi

cassandra - 允许过滤实现@Cassandra

转载 作者:行者123 更新时间:2023-12-04 15:27:02 27 4
gpt4 key购买 nike

我有一张如下表:

CREATE TABLE tab(
categoryid text,
id text,
name text,
author text,
desc text,
PRIMARY KEY (categoryid , id)
) WITH CLUSTERING ORDER BY (id ASC);

CREATE INDEX ON tab (name);
CREATE INDEX ON tab (author);

当我执行以下查询时:

select * from tab ALLOW FILTERING;  ---1
select * from tab where id = 'id01' ALLOW FILTERING; ---2
select * from tab where categoryid = 'cid01' ALLOW FILTERING; ---3

这三个查询的后端发生了什么?

是否会完全忽略 id 和 categoryid 上的关键索引。

感谢您的回复。谢谢

最佳答案

通过指定 ALLOW FILTERING 您基本上是在告诉 Cassandra 您可以接受它从您的表中检索所有行,逐一检查每一行,并仅返回与您的匹配的行WHERE 子句。根据您的 WHERE 子句,它可能需要也可能不需要这样做。对于大型表或必须查询多个节点以检索所有数据的表,这可能是一个非常缓慢的操作。

select * from tab ALLOW FILTERING;

对于此查询,您没有指定 WHERE 子句,因此它将返回 tabs 表中的所有行。 ALLOW FILTERING 不应该以任何明显的方式改变这个的性能。

select * from tab where id = 'id01' ALLOW FILTERING;

在此查询中,Cassandra 将从 tab 表中检索所有行,并仅返回 id='id01' 中的行。 id 是一个聚类键的事实在这里并不会产生太大的影响。这是因为分区键对于数据查找很重要,而集群键通常用于强制行唯一性和排序。顺便说一句,由于您不是按分区键 (categoryid) 查询,它甚至无法在 id 上强制执行聚类顺序,因此您的结果集不会按 id.

select * from tab where categoryid = 'cid01' ALLOW FILTERING;

这样的查询让 Cassandra 高兴!是的,将尊重 categoryid 是您的分区键这一事实,并且您的结果集将包含 categoryid='cid01' 的所有 CQL 行。作为额外的奖励,在这种情况下,您的聚类顺序将被强制执行。

DataStax 的开发者博客有一篇关于这个主题的不错的文章,它也可能对您有所帮助:ALLOW FILTERING Explained .

在我看来,我会避免需要 ALLOW FILTERING 的查询。我当然不会在生产环境或 OLTP 环境中运行。

关于cassandra - 允许过滤实现@Cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28888865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com