2017-04-12 3 views
3

내 테이블에 설명되지 않은 파티션 키에 절이고 작동하지 cqlsh : 사용자의 선택 카산드라는

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) 
); 

*가 잘 작동

.

select * 사용자가 파티션 키가 잘 작동하는 곳에서 선택하십시오.

하지만 절은 이유가 될 수 error.What 아래 점점 곳에서 비 파티션 키를 걸었습니다 경우?

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

소리가 비슷합니다. http://stackoverflow.com/questions/37114455/reading-error-in-cassandra –

+0

나는'tombstone_failure_threshold' 값을 증가 시켰습니다. 여전히 작동하지 않습니다. – curiousguy

+0

로그에 무엇인가가 보입니까? 여전히 묘비가 될 수 있습니다 (이보다 더 많이 가져야 함). –

답변

1

allow filtering을 사용하고 있습니다. 조심해. 허용 필터링을 사용하여이 쿼리를 실행하면 많은 컴퓨팅 리소스를 사용할 수 있고 시간 초과로 인해 결과를 반환하지 않을 수도 있으므로 좋은 생각이 아닙니다. 생산 필터링 필터링을

https://docs.datastax.com/en/cql/3.3/cql/cql_reference/select_r.html?hl=allow,filter

을 허용하여 대신 필터링보기 또는 인덱스를 구체화 만들 수 있도록 사용하는 방법에 대한 datastax의 문서를 읽기 수 있도록 사용하지 마십시오. 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

2
select * from user where CustID =0 allow filtering; 

. 이 문제를 해결하는 가장 좋은 방법은 쿼리를 제공하도록 특별히 설계된 테이블입니다. 작동

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

을하고있는 중이 야.이러한 제한 시간 기본값은 특정 이유로 존재합니다. 이들은 성능이 좋지 않은 쿼리로 인해 클러스터/노드가 넘어지는 것을 방지합니다. 문제가 발생하여 쿼리 시간 제한을 늘리려는 경우 쿼리를 자세히 살펴보고 더 나은 방법을 구축 할 수 있는지 확인하십시오.

+0

그래서'cust_id'는 내 '파티션 키'이고'id, UpdateDate'는 클러스터링 키입니까? 이제 여러 개의 다른 컬럼에 where 절을 쿼리하려는 경우 클러스터링 키로 추가해야 여러 테이블을 사용하여 목적을 달성 할 수 있습니다. 나는 여기에서 성과를 고려하고있다. – curiousguy

+0

당신은 여러 테이블 경로를 가고 싶어합니다. 이것이 카산드라 (또는 그 문제에 대한 분산 데이터베이스)와의 절충점입니다. 쿼리 유연성은 항상 달성하기가 어렵습니다. 다른 데이터 저장소를 사용하는 것이 더 많은 의미를 갖기 전에 몇 개의 테이블을 동기화 상태로 유지해야하는지에 대한 문제가 있습니다. – Aaron

+0

@curiousguy 또 다른 생각 : Cassandra 3.x를 사용하는 경우 구체화 된보기 또는 (특정 시나리오에서) SASI 색인을 사용하여 일부 쿼리 테이블 오버 헤드를 완화 할 수 있습니다. 이러한 도구는 읽기 성능에 약간의 타격을 입을 경우 쿼리 유연성을 높이는 데 도움이 될 수 있습니다. – Aaron