2014-09-02 68 views
1

我們想要測量Cassandra的性能,所以我們計劃將10800行數據寫入一個表,每行有大約1MB的數據。對於寫作來說,這似乎沒有問題。Cassandra使用C#驅動讀取拋出異常

當我們試圖讀取卡桑德拉上述所有10800行,它總是拋出異常這樣的:

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#驅動程序? – 2014-09-08 18:48:13

回答

0

我試圖調查爲什麼你從Cassandra讀取超時(通過tracing),你不應該改變Cassandra的讀取超時設置(你的節點在Windows下?)。

之後,在驅動程序級別,您可以配置在讀取超時時執行的操作(實現retry policy,示例here),但通常不是必需的。

如果您正在閱讀大約1MB的cql行,則可以使用Statement.SetPageSize()方法通過降低頁面大小(默認值:5000)來嘗試。