Cassandra要求允许筛选,即使列是集群键

Cassandra要求允许筛选,即使列是集群键,cassandra,Cassandra,卡桑德拉是个新手,如果问题简单,我道歉 我创建了一个表: create table ApiLog ( LogId uuid, DateCreated timestamp, ClientIpAddress varchar, primary key (LogId, DateCreated)); 这项工作很好: select * from apilog 如果我尝试添加一个where子句,其创建日期如下: select * from apilog where datecreated <

卡桑德拉是个新手,如果问题简单,我道歉

我创建了一个表:

create table ApiLog (
LogId uuid,     
DateCreated timestamp,
ClientIpAddress varchar,
primary key (LogId, DateCreated));
这项工作很好:

select * from apilog
如果我尝试添加一个where子句,其创建日期如下:

select * from apilog where datecreated <= '2016-07-14'

分区键LogId确定每个分区将存储在哪个节点上。因此,如果您没有指定分区键,那么Cassandra必须过滤所有节点上该表的所有分区以查找匹配的数据。这就是为什么您必须说允许过滤,因为这种操作效率很低,不鼓励使用

如果指定特定的LogId,那么Cassandra可以在单个节点上找到分区,并通过集群键高效地执行范围查询


因此,您需要规划您的模式,这样您就可以在单个分区内执行范围查询,而不必像您正在尝试的那样执行完整的表扫描。

那么,我是否正确地假设将包含uuid的PK作为分区键始终是一个坏主意,因为您永远无法高效地查询数据?是的,这通常不是一个好主意,因为分区中只有一行。这只有在应用程序需要一次处理一行时才有用。我现在明白了。我想从RDBMS开始用不同的方式思考需要一些时间,谢谢。
create index ApiLog_DateCreated on dotnetdemo.apilog (datecreated);