Cassandra使用C#驱动程序读取抛出异常

本文关键字:读取 抛出异常 驱动程序 使用 Cassandra | 更新日期: 2023-09-27 18:20:28

我们想测量Cassandra的性能,所以我们计划将10800行数据写入一个表,每行大约有1MB的数据。对于写作来说,这似乎没有问题。

当我们试图从cassandra读取所有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的数据并没有那么大,为什么它不能读取所有数据?或者我错过了什么?

非常感谢。

Cassandra使用C#驱动程序读取抛出异常

我想调查一下为什么你会从Cassandra(通过跟踪)获得读取超时,你不应该更改Cassandra中的读取超时设置(你的节点在Windows下吗?)。

之后,在驱动程序级别,您可以配置读取超时时要做的操作(实现重试策略,此处示例),但通常没有必要。

如果您正在读取大约1MB的cql行,您可以尝试使用Statement.SetPageSize()方法降低页面大小(默认值:5000)。