Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许过滤实现@Cassandra_Cassandra_Datastax Java Driver_Cassandra Cli - Fatal编程技术网

允许过滤实现@Cassandra

允许过滤实现@Cassandra,cassandra,datastax-java-driver,cassandra-cli,Cassandra,Datastax Java Driver,Cassandra Cli,我有一张如下表: 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); 当我执行以下查询时:

我有一张如下表:

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
子句,因此它将返回
选项卡
表中的所有行<代码>允许过滤不应以任何明显的方式改变此功能的性能

select * from tab where id = 'id01' ALLOW FILTERING;
在这个查询中,Cassandra将从
选项卡
表中检索所有行,只返回
id='id01'
中的行。事实上,
id
是一个集群键,这在这里并没有多大区别。这是因为分区键对于数据查找非常重要,而集群键通常用于强制行唯一性和排序。顺便说一句,由于您不是按分区键(
categoryid
)进行查询,它甚至不能对
id
强制执行聚类顺序,因此您的结果集将不会按
id
进行排序

select * from tab where categoryid = 'cid01' ALLOW FILTERING;
这样的疑问让卡桑德拉很高兴!是的,
categoryid
是分区键这一事实将得到尊重,并且结果集将包含所有CQL行,其中
categoryid='cid01'
。作为额外的好处,在这种情况下,您的集群顺序将被强制执行

DataStax的开发者博客中有一篇关于此主题的文章,可能对您有进一步的帮助:


在我看来,我会避免需要允许过滤的查询。我当然不会在生产环境或OLTP环境中运行一个查询。

您能告诉我这个查询会发生什么吗?从categoryid='cid01'和desc='xyz'允许筛选的选项卡中选择*;