我使用Cassandra的DataSax php驱动程序遇到超时问题。 每当我执行某个命令时,它总是在10秒后抛出此异常:
PHP Fatal error: Uncaught exception 'Cassandra\Exception\TimeoutException' with message 'Request timed out'
我的PHP代码是这样的:
$cluster = Cassandra::cluster()->build();
$session = $cluster->connect("my_base");
$statement = new Cassandra\SimpleStatement("SELECT COUNT(*) as c FROM my_table WHERE my_colunm = 1 AND my_colunm2 >= '2015-01-01' ALLOW FILTERING")
$result = $session->execute($statement);
$row = $result->first();
我在 cassandra.yaml 中的设置是:
# How long the coordinator should wait for read operations to complete
read_request_timeout_in_ms: 500000
# How long the coordinator should wait for seq or index scans to complete
range_request_timeout_in_ms: 1000000
# How long the coordinator should wait for writes to complete
write_request_timeout_in_ms: 2000
# How long the coordinator should wait for counter writes to complete
counter_write_request_timeout_in_ms: 50000
# How long a coordinator should continue to retry a CAS operation
# that contends with other proposals for the same row
cas_contention_timeout_in_ms: 50000
# How long the coordinator should wait for truncates to complete
# (This can be much longer, because unless auto_snapshot is disabled
# we need to flush first so we can snapshot before removing the data.)
truncate_request_timeout_in_ms: 60000
# The default timeout for other, miscellaneous operations
request_timeout_in_ms: 1000000
我已经尝试过这个:
$result = $session->execute($statement,new Cassandra\ExecutionOptions([
'timeout' => 120
])
);
和此:
$cluster = Cassandra::cluster()->withDefaultTimeout(120)->build();
和此:
set_time_limit(0)
它总是在10秒后抛出TimeoutException .. 我正在使用 Cassandra 3.6 有什么想法吗?
答案 0 :(得分:0)
你做错了两件事。
如何解决?
答案 1 :(得分:0)
使用withConnectTimeout
(而不是withDefaultTimeout
或与TimeoutException
一起使用)可能有助于避免使用$cluster = Cassandra::cluster()->withConnectTimeout(60)->build();
(在我的情况下如此)
csrf
但是,如果您需要这么长的超时时间,那么可能存在一个潜在的问题,最终需要解决。