【问题标题】:Accessing Cassandra Filtering allowed need to be added需要添加允许访问 Cassandra 过滤
【发布时间】:2017-12-20 10:34:40
【问题描述】:

我有如下的 Cassandra 表

create table user(
id UUID PRIMARY KEY,
firstname varchar,
secondname varchar,
emailid varchar,
);

来自 Java - Spring Boot 我试图访问数据

Optional<User> findByEmailid(String emailId);

我收到错误说明

它要求我使用查询的“过滤允许”部分。无论如何要全局启用它还是我应该更改查询/数据库结构?

【问题讨论】:

    标签: java spring-boot cassandra


    【解决方案1】:

    该错误告诉您emailid 不是可以在 WHERE 子句中过滤的有效列。启用ALLOW FILTERING 或在该列上创建二级索引是执行此操作的一种方法。但这两个都是非常糟糕的解决方案(因为 Cassandra 是如何在幕后工作的)。

    使用 Cassandra,您需要采用基于查询的建模方法。这意味着有时(通常)查询和表共享 1:1 的比率。如果您确实需要通过电子邮件地址查询用户,那么您需要创建一个表来提供该查询。

    CREATE TABLE user_by_email(
      id UUID,
      firstname varchar,
      secondname varchar,
      emailid varchar PRIMARY KEY,
    );
    

    然后这样的事情会起作用:

    Optional<UserByEmail> findByEmailid(String emailId);
    

    如果您不打算通过id 查询user 表,那么确实没有理由将该列用作您唯一的主键。

    【讨论】:

    • 这是否意味着我应该始终使用 PRIMARY KEY 进行查询?我不能用其他列过滤?
    • @syv 正确。始终需要使用您打算查询的任何列来构建主键。
    • 谢谢。我已经详细完成了设计,建议了 3 个选项 1. 需要重新查看数据模型 2. 允许过滤器 3. 添加索引。
    猜你喜欢
    • 2017-07-23
    • 2019-01-13
    • 2023-03-10
    • 2015-05-07
    • 2020-10-12
    • 2021-09-10
    • 1970-01-01
    • 2019-02-10
    • 2016-08-14
    相关资源
    最近更新 更多