- 问题**
我想使用dotnet驱动程序为特定的只读查询设置超时。
- 背景**
我有一个类似select count(*) from TABLE where ID=value
的查询
我知道:
- count(*)查询效率不高
- 不能保证该查询将返回正确的结果
- 它将进行完全群集扫描
尽管如此,我仍然希望每3 - 4个月运行一次查询。
要求:
- 从dotnet驱动程序指定超时
- 不要触摸任何cassandra服务器的yml配置
- 我尝试的内容**我在本地的单个节点上有一个大型数据库。当我设置查询超时时,它会得到遵守,一切正常。几分钟后我就得到了结果。但是,当我有一个包含5个节点的群集时,协调器节点获得查询并针对其它节点执行它,并且它命中5秒超时。我通过驱动程序为套接字或查询配置的任何超时都被忽略。我还尝试了所有可能的一致性级别。还尝试使用忽略错误的重试策略。
长者/克洛诺斯。坚持。 cassandra
- 问题**当集群中配置了cassandra时,是否可以通过dotnet驱动程序为只读查询设置超时?
2条答案
按热度按时间deikduxw1#
客户端读取超时配置为
SocketOptions.SetReadTimeoutMillis()
,默认设置为12000
ms(12s)。您可以通过调用与所有其他语句类型共享的
Statement.SetReadTimeoutMillis()
来覆盖特定操作的超时。顺便说一句,当查询被限制在单个分区时,
COUNT()
是非常好的,因为它只计算该分区中的行数,它不会导致全表扫描,也不会遇到我在WhyCOUNT()
is bad in Cassandra中讨论过的问题。qxsslcnc2#
如果要我猜的话,5秒的超时听起来像是
read_request_timeout
的默认值,所以我敢打赌,这将在集群级别被切断,而不管为驱动程序配置设置了什么。请查看
cassandra.yaml
文件中的Cassandra节点以获取此值:read_request_timeout
。它应该设置为5000ms
。注意不要把这个值提得太高,选择这个值是有原因的,最终是为了保护集群免受消耗太多资源的查询的影响。