2014-09-02 5 views
1

우리는 Cassandra 성능을 측정하기를 원하므로 10800 행 데이터를 한 테이블에 쓰려고합니다. 각 행에는 약 1MB 데이터가 있습니다. 글쓰기에는 문제가없는 것 같습니다. 우리는 카산드라의 모든 위의 10800 개 행을 읽으려고 할 때Cassandra는 C# 드라이버에서 예외 예외를 읽어들입니다.

은 항상 이런 식으로 예외를 던져 :

Cassandra.ReadTimeoutException: Cassandra timeout during read query at consistency One (0 replica(s) responded over 1 required) 
    at Cassandra.TaskHelper.WaitToComplete[T](Task`1 task, Int32 timeout) 
    at Cassandra.Session.Execute(IStatement statement) 
    at Cassandra.Session.Execute(String cqlQuery, ConsistencyLevel consistency) 
    at DataCloud.TestApps.CassandraTest.CassandraClient.Execute(String cqlQuery) 

그런 다음 우리는 여전히, 충분한 시간에 읽기 제한 시간을 변경하려면 수동을 cassandra.yaml 파일을 수정 같은 예외. 우리는 모든 데이터를 쿼리하는 데 사용 무엇

은 다음과 같습니다

SELECT * FROM table1 WHERE id = ...; // The id is the partition key 

그래서 우리가 행이 1024 카운트 변경, 여전히 읽기에서 예외가 발생하지만, 이번에는 다르다 :

Cassandra.NoHostAvailableException: None of the hosts tried for query are available (tried: 127.0.0.1) 
    at Cassandra.RequestHandler`1.GetNextConnection(IStatement statement, Boolean isLastChance) 
    at Cassandra.RequestHandler`1.TrySend() 
    at Cassandra.TaskHelper.WaitToComplete[T](Task`1 task, Int32 timeout) 
    at Cassandra.Session.Execute(IStatement statement) 
    at Cassandra.Session.Execute(String cqlQuery, ConsistencyLevel consistency) 
    at DataCloud.TestApps.CassandraTest.CassandraClient.Execute(String cqlQuery) 

우리 또한 100 행을 시도, 괜찮아 보인다.

그래서 C#으로 cassandra에서 데이터를 읽는 가장 좋은 방법은 무엇입니까? 나는 10800MB의 데이터가 그다지 크지 않다고 생각하는데 왜 그것들 모두를 읽을 수 없습니까? 또는 나는 무엇인가 놓쳤다?

대단히 감사합니다.

+1

1) cqlsh에서 동일한 쿼리를 실행 해 보았습니까? 첫 번째 오류는 Cassandra 시간 초과 (드라이버 시간 제한이 아님)이며 클러스터가 느린 것을 가리 킵니다. 2) 어떤 버전의 C# 드라이버를 사용하고 있습니까? –

답변

0

카산드라에서 시간 제한을 읽는 이유 (tracing을 통해)를 조사하려고 할 때 Cassandra의 읽기 시간 제한 설정을 변경하지 않아도됩니다 (Windows의 노드입니까?).

그런 다음 드라이버 수준에서 읽기 시간이 초과 될 때 수행 할 작업을 구성 할 수 있습니다 (retry policy, 샘플 here 구현). 일반적으로 필요하지 않습니다.

약 1MB의 cql 행을 읽는 경우 Statement.SetPageSize() 메소드를 사용하여 페이지 크기 (기본값 : 5000)를 낮추면됩니다.