需要添加访问Cassandra过滤功能

时间:2017-07-15 12:03:33

标签: java spring-boot cassandra

我有Cassandra表如下

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

从Java - Spring Boot我试图访问数据

Optional<User> findByEmailid(String emailId);

我收到错误陈述

它要求我使用“FILTERING ALLOWED”部分查询。反正有没有全局启用它,或者我应该更改查询/数据库结构?

1 个答案:

答案 0 :(得分: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);

如果您没有计划通过user查询id表,那么就没有理由将该列用作唯一的主键。