首页 > 解决方案 > Cassandra 3.11,按列表过滤结果(搜索替代品)

问题描述

我想要求 cassandra 通过参数列表过滤其结果。但这在“正常”列上是不可能的。或者用 cassandra 的话来说:

IN predicates on non-primary-key columns (access_right_id) is not yet supported

我的表如下所示:

CREATE TABLE "service"
(
    course_id       uuid,
    type            text,
    access_token    uuid,

    name_de         text,
    name_en         text,
    url             text,
    edit_right_id   uuid,
    access_right_id uuid,

    PRIMARY KEY (course_id, type, access_token)
);

我想执行这样的查询:

SELECT * FROM service WHERE
course_id = :courseId
AND type = :type
AND access_right_id IN :rights

我现在正在寻找解决我的问题的方法。我正在考虑三种可能的解决方案:

  1. 发送 N 次查询(可能带有物化视图并access_right_id作为主键部分(集群键))
    SELECT * FROM service WHERE
    course_id = :courseId
    AND type = :type
    AND access_right_id = :right
    
  2. 像这样发送一个生成的查询:
    SELECT * FROM service WHERE
    course_id = :courseId
    AND type = :type
    AND (access_right_id = :right1 OR access_right_id = :right2 OR access_right_id = :right ...)
    
  3. 发送查询而不过滤并过滤代码中的结果。

在这种情况下,你觉得这是最好的吗?什么是更“顺从”的 cassandra?

预先感谢您的意见。

标签: cassandracql

解决方案


推荐阅读