我有以下代码
myLabel.Text = ConfigurationManager.AppSettings["Description"];
执行此操作时,我会获得 @Indexed
@PrimaryKeyColumn(name = "x", ordinal = 1, type = PrimaryKeyType.PARTITIONED)
@Column(value="x")
private String x;
@Indexed
@PrimaryKeyColumn(name = "code", ordinal = 2, type = PrimaryKeyType.PARTITIONED)
@Column(value="code")
private String code;
@Query(value = "select * from customers where code = ?0")
Optional<Customer> findByCode(String code);
。
有没有办法从Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING
避免这种情况?我不想在查询中添加spring-data-cassandra
。我尝试在ALLOW FILTERING
列上创建单独的索引,但这还没有解决问题。我认为它在spring数据配置中停止了。如果我在code
中执行相同的查询,则可以正常运行。
答案 0 :(得分:3)
您必须在查询中指定分区键,除非您创建索引或使用ALLOW FILTERING
使用allow过滤执行查询可能不是一个好主意,因为它可能会占用大量的计算资源,并且由于超时而不会返回任何结果。不要在生产中使用allow过滤阅读有关使用ALLOW FILTERING
的datastax文档https://docs.datastax.com/en/cql/3.3/cql/cql_reference/select_r.html?hl=allow,filter
答案 1 :(得分:0)
使用no-sql数据库时,需要正确设计数据以避免过滤。您可以添加二级索引以优化特定字段的检索。此处有更多详细信息:https://docs.datastax.com/en/archived/cql/3.3/cql/cql_using/useSecondaryIndex.html
如果您确定查询是您所需要的,则可以使用allowFiltering
批注中的@Query
参数来明确指示要使用ALLOW FILTERING
。
@Query(value = "select * from customers where code = ?0", allowFiltering = true)
Optional<Customer> findOneByCode(String code);