首页 文章

范围查询如何在Cassandra中运行?

提问于
浏览
0

查询我想解雇

select * from t1 where c1 > 1000 and c2 > 1Million and c3 > 8Million

表t1的数据模型

create table t1 {
    c1 int,
    c2 int,
    c3 int,
    c4 text
}

我应该将哪些列用作分区键,哪些列用作群集键 . c1,c2,c3的值可以在1到10百万之间 .

如果我执行主键((c1,c2,c3)),则值将在群集中传播 . 但是当我在c1,c2,c3列上查询>查询时,Cassandra如何知道要联系哪些节点或者进行完整的分片扫描?

2 回答

  • 0

    它不允许你在没有 ALLOW FILTERING 的情况下进行查询,这使得它可以读取整个数据集,因为它遍及整个集群 . 它会读取所有内容,丢弃不匹配的东西 . 强烈建议永远不要在开发/测试之外使用 ALLOW FILTERING ,除非你真的确定你在做什么 .

  • 1

    分区键只能用相等的方式过滤,而不能用你所拥有的不等式过滤 . 不等式只能与聚类键一起使用 .

    如果您的表没有那么多行,则可以使用存储桶策略 . 使用它,您可以创建一个辅助列作为唯一具有预定义值(例如1)的分区键 .

    create table t1 {
        bucket int,
        c1 int,
        c2 int,
        c3 int,
        c4 text,
        PRIMARY KEY (bucket, c1, c2, c3)
    }
    

    因为您有一个分区,所以它不适合扩展包含许多行的表 .

    如果您有许多行需要分区,那么您必须重新考虑您的策略,并考虑:

    • 在数据中查找某种能够对数据进行分区的键(或键),同时在需要时帮助对其进行过滤 . 然后,您将在上面的示例中将其用作分区键 . 也许对数据进行非规范化可以帮助实现该密钥(例如:创建一个名为Status for Low / Medium / High数字的列,您可以稍后在群集密钥的不等式过滤中更好地过滤) .

    • 计划要由分析框架(如Spark)查询的表(或多个表) . 在分析中,通常需要通过任何列进行查询,具有等式或不等式 .

相关问题