2014-09-02 69 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)来尝试。