Cassandra - 查询聚类键

时间:2015-05-27 15:31:32

标签: cassandra primary-key cql clustering-key

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

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

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

select * from tablename where b=val;

结果:

  

无法执行此查询,因为它可能涉及数据过滤,因此   可能有不可预测的表现。如果要执行此查询   尽管性能不可预测,但请使用ALLOW FILTERING

使用"允许过滤"得到我想要的东西(即使我听说它对表现有害)。

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

select * from tablename where c=val;

它说:

  

PRIMARY KEY栏" c"不能限制(前一栏" b"不受限制或非EQ关系)

并且没有"允许过滤"选择权。

我的问题 - 为什么所有群集密钥都不一样?与分区键相邻的列b' a'我们可以选择“允许过滤”。它允许在查询列的同时查询它' c'似乎根本不可能(考虑到这个表的布局方式)。

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

1 个答案:

答案 0 :(得分:18)

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

要添加到您的示例中,请假设为PRIMARY KEY ((a),b,c,d)。您只需指定bbc即可运行查询(使用ALLOW FILTERING)。但它不允许您指定cd(跳过b)或bd(跳过c)。< / p>

作为辅助节点,如果您真的希望只能b或仅c进行查询,那么您应该支持那些具有此类设计的其他表格的查询。允许过滤是一种创可贴,在生产Cassandra部署中不应该做任何事情。