2016-11-21 5 views
1

Ich habe Probleme mit Timeout mit dem DataSax PHP-Treiber für Cassandra. Jedes Mal, wenn ich einen bestimmten Befehl ausführen es wirft immer diese Ausnahme nach 10s:Cassandra - DataSax PHP Treiber - Timeout

PHP Fatal error: Uncaught exception 'Cassandra\Exception\TimeoutException' with message 'Request timed out' 

Mein PHP-Code ist wie folgt:

$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(); 

Meine Einstellungen in cassandra.yaml ist:

# 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 

Ich habe es schon versucht:

$result = $session->execute($statement,new Cassandra\ExecutionOptions([ 
     'timeout' => 120 
    ]) 
); 

und diese:

$cluster = Cassandra::cluster()->withDefaultTimeout(120)->build(); 

und diese:

set_time_limit(0) 

Und es wirft immer die Timeout nach 10s .. Ich verwende Cassandra 3.6 Jede Idee?

Antwort

0

Zwei Dinge, die Sie falsch machen.

  1. ERLAUBEN FILTERN: Seien Sie vorsichtig. Die Ausführung dieser Abfrage mit Filter zulassen ist möglicherweise keine gute Idee, da sie viele Ihrer Computerressourcen verwenden kann. verwenden, nicht zulassen Filterung in der Produktion die DataStax doc Lesen Sie erlauben die Verwendung FILTERING https://docs.datastax.com/en/cql/3.3/cql/cql_reference/select_r.html?hl=allow,filter
  2. count (): Es ist auch eine schreckliche Idee zu verwenden count (). count () seiten tatsächlich alle Daten durch. Es würde also erwartet werden, dass eine Auswahlanzahl () von Benutzerdetails ohne ein Limit mit diesen vielen Zeilen abläuft. Einige Details hier: http://planetcassandra.org/blog/counting-key-in-cassandra/

Wie man es repariert?

  • Statt Filterung erlauben es verwenden, Sie sollten Indextabelle von Ihre Clustering Spalte erstellen, wenn Sie Abfrage ohne Partitionsschlüssel benötigen.
  • Anstelle von count (*) sollten Sie eine Zählertabelle
erstellen
Verwandte Themen