首页 文章

Cassandra - 查询聚类键

提问于
浏览
11

我刚刚开始使用Cassandra,我正在尝试使用不同的分区和群集密钥创建表,以便了解如何以不同方式查询它们 .

我用表格的主键创建了一个表 - (a),b,c,其中a是分区键,b,c是聚类键 .

查询时我注意到以下查询:

select * from tablename where b=val;

结果是:

无法执行此查询,因为它可能涉及数据过滤,因此可能具有不可预测的性能 . 如果要在性能不可预测的情况下执行此查询,请使用ALLOW FILTERING

使用“ALLOW FILTERING”可以得到我想要的东西(即使我听说它对性能有害) .

但是当我运行以下查询时:

select * from tablename where c=val;

它说:

PRIMARY KEY列“c”不能被限制(前一列“b”不受限制或非EQ关系)

并且根本没有“允许过滤”选项 .

MY QUESTION IS - 为什么不对所有群集密钥进行相同处理?与分区键'a'相邻的列b被赋予'allow filtering'选项,允许查询它,而查询列'c'似乎根本不可能(考虑到此表的布局方式) .

允许过滤获取cassandra扫描所有SSTable并在缺少分区键时从中获取数据,那么为什么我们不能执行相同的列c?

1 回答

  • 16

    这并不是说聚类键不一样,而是你不能跳过它们 . 这是因为Cassandra使用群集键来确定分区内的磁盘排序顺序 .

    要添加到您的示例,请假设 PRIMARY KEY ((a),b,c,d) . 您可以通过仅指定 bbc 来运行查询(使用ALLOW FILTERING) . 但它不允许您指定 cd (跳过 b )或 bd (跳过 c ) .

    作为一个副节点,如果您真的希望能够仅通过 b 或仅 c 进行查询,那么您应该支持那些具有这样设计的附加表的查询 . 允许过滤是一种创可贴,并不是你应该在 生产环境 Cassandra部署中做的事情 .

相关问题