我的表描述是:
CREATE TABLE user (
id text,
CustID int static,
UpdateDate date,
DateOfBirth date static,
Gender text static,
Address text static,
City text static,
State text static,
Zip text static,
Email text static,
Phone text static,
OverallAssets double,
PRIMARY KEY (id,UpdateDate)
);
从用户中选择*工作正常。
从用户中选择*,其中分区键也正常工作。
但是,如果我在where子句中输入非分区键错误。可能是什么原因?
ReadFailure: Error from server: code=1300 [Replica(s) failed to execute
read] message="Operation failed - received 0 responses and 1 failures" info=
{'failures': 1, 'received_responses': 0, 'required_responses': 1,
'consistency': 'ONE'}
答案 0 :(得分:2)
select * from user where CustID =0 allow filtering;
在Cassandra中,需要采用基于查询的建模方法。解决此问题的最佳方法是使用专门设计用于提供该查询的表。
CREATE TABLE users_by_custid (
id text,
CustID int,
UpdateDate date,
DateOfBirth date static,
Gender text static,
Address text static,
City text static,
State text static,
Zip text static,
Email text static,
Phone text static,
OverallAssets double,
PRIMARY KEY (cust_id,id,UpdateDate)
);
这将有效,它将很好地分发,并且不会要求ALLOW FILTERING
附带的全表扫描。
是的我正在做
cqlsh --connect-timeout=100000000 --request-timeout=10000000000
我不能警告你不要这样做。这些超时默认值存在是有原因的。它们可以防止您的群集/节点因执行错误的查询而导致翻倒。当您遇到问题并试图增加查询超时时,请仔细查看您的查询,看看是否有更好的方法来构建它。
答案 1 :(得分:1)
您正在使用allow filtering
。小心。使用allow过滤执行此查询可能不是一个好主意,因为它可能会使用大量的计算资源,并且可能由于超时而无法返回任何结果。不要在生产中使用allow过滤阅读有关使用ALLOW FILTERING的数据文档文档
https://docs.datastax.com/en/cql/3.3/cql/cql_reference/select_r.html?hl=allow,filter
而不是使用允许过滤创建物化视图或索引。
点击此链接,了解如何创建和使用实体化视图:https://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views
查看有关创建和使用索引的链接:http://docs.datastax.com/en/cql/3.1/cql/cql_reference/create_index_r.html
何时不使用索引
在这些情况下不要使用索引:
来源:http://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_when_use_index_c.html