cassandra 如何在C#驱动程序中设置特定查询的读取超时?

trnvg8h3  于 2023-03-08  发布在  Cassandra
关注(0)|答案(2)|浏览(202)
    • 问题**

我想使用dotnet驱动程序为特定的只读查询设置超时。

    • 背景**

我有一个类似select count(*) from TABLE where ID=value的查询
我知道:

  • count(*)查询效率不高
  • 不能保证该查询将返回正确的结果
  • 它将进行完全群集扫描

尽管如此,我仍然希望每3 - 4个月运行一次查询。
要求:

  • 从dotnet驱动程序指定超时
  • 不要触摸任何cassandra服务器的yml配置
    • 我尝试的内容**我在本地的单个节点上有一个大型数据库。当我设置查询超时时,它会得到遵守,一切正常。几分钟后我就得到了结果。但是,当我有一个包含5个节点的群集时,协调器节点获得查询并针对其它节点执行它,并且它命中5秒超时。我通过驱动程序为套接字或查询配置的任何超时都被忽略。我还尝试了所有可能的一致性级别。还尝试使用忽略错误的重试策略。

长者/克洛诺斯。坚持。 cassandra

    • 问题**当集群中配置了cassandra时,是否可以通过dotnet驱动程序为只读查询设置超时?
deikduxw

deikduxw1#

客户端读取超时配置为SocketOptions.SetReadTimeoutMillis(),默认设置为12000 ms(12s)。
您可以通过调用与所有其他语句类型共享的Statement.SetReadTimeoutMillis()来覆盖特定操作的超时。
顺便说一句,当查询被限制在单个分区时,COUNT()是非常好的,因为它只计算该分区中的行数,它不会导致全表扫描,也不会遇到我在Why COUNT() is bad in Cassandra中讨论过的问题。

qxsslcnc

qxsslcnc2#

如果要我猜的话,5秒的超时听起来像是read_request_timeout的默认值,所以我敢打赌,这将在集群级别被切断,而不管为驱动程序配置设置了什么。
请查看cassandra.yaml文件中的Cassandra节点以获取此值:read_request_timeout。它应该设置为5000ms
注意不要把这个值提得太高,选择这个值是有原因的,最终是为了保护集群免受消耗太多资源的查询的影响。

相关问题