Кассандра датастакс |TimeoutException - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблема с Кассандрой. У меня следующая ошибка.Я связываю картинку

Синтаксис кода:

 public function find($db_table = null, $db_id = null) {
        $filter = "";
        $return = array();

        $cluster = $this->cluster();
        $session = $cluster->connect($this->keyspace);

        if(isset($db_table)) {
            $filter .= " WHERE db_table like '%".$db_table."%' ";

            if($db_id != null) {
                $filter .= " AND db_id = '".$db_id."' ALLOW FILTERING";
            }
        }

        $query  = new Cassandra\SimpleStatement("SELECT * FROM ".$this->keyspace.".log $filter;");
        $result = $session->executeAsync($query);
        $rows   = $result->get();

Cassandra Error picture

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Более подробную информацию можно найти здесь.

https://docs.datastax.com/en/developer/php-driver/1.2/api/Cassandra/Cluster/class.Builder/

Использование withConnectTimeout может помочь избежать исключения TimeoutException

$cluster = $this->cluster()->withConnectTimeout(60);

, вы можете увеличить значение времени ожидания, хотя выобновите немного больше, изменив значения в /etc/cassandra/cassandra.yaml

, как показано ниже -

sudo nano /etc/cassandra/cassandra.yaml (для редактирования файла cassandra.yaml)

# How long the coordinator should wait for read operations to complete
read_request_timeout_in_ms: 50000
# How long the coordinator should wait for seq or index scans to complete
range_request_timeout_in_ms: 100000
# How long the coordinator should wait for writes to complete
write_request_timeout_in_ms: 20000
# 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: 10000
# 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: 600000
# The default timeout for other, miscellaneous operations
request_timeout_in_ms: 100000

# How long before a node logs slow queries. Select queries that take longer than
# this timeout to execute, will generate an aggregated log message, so that slow queries
# can be identified. Set this value to zero to disable slow query logging.
slow_query_log_timeout_in_ms: 5000
0 голосов
/ 30 мая 2019
  1. используя "LIKE" на Кассандре, я так не думаю: (
  2. ваш запрос :( попробуйте сделать что-то более чистое, вместо этого используйте ". $ Db_table.", Используйте правильное связывание.?, А затемвнутри вашего exec (query, ['value'])
  3. что вы имеете в виду? с SELECT * FROM ". $ this-> keyspace.". log это не запрос! если вы используетеэто в php, синтаксис определенно это совершенно неверно. вы написали SELECT * FROM keyspace_name.log WHERE таблицу типа 'wherever' и id = 'кое-что' :( и еще хуже выберите ALL
    , этого никогда не произойдет

  4. вы используете $ this для вызова кластера, откуда? Откуда это взялось?

хорошо, я могу перечислить 10 различных причин, по которым ваш код не работает,но это не моя цель, я хочу помочь вам, поэтому попробуйте что-нибудь простое.

____ хорошо _____

<?

$cluster   = Cassandra::cluster()
               ->withContactPoints('127.0.0.1')
               ->build();
$session   = $cluster->connect("your_k_space");


$table_list = $session->execute("SELECT table_name FROM system_schema.tables WHERE keyspace_name = 'your_k_space'");


if (in_array($db_table, $table_list)) {
   $options = array('arguments' => [$db_table,$db_id]);
    $result = $session->execute("SELECT * FROM ? WHERE db_id = ?  ALLOW FILTERING",$options);
    foreach ($result as $key => $value) print_r($value);



}else{
    die('table not found');
}
0 голосов
/ 28 февраля 2019
  1. Вы не должны использовать «разрешить фильтрацию», если не знаете, что делаете.
  2. SELECT * FROM prod.log ГДЕ db_id = 13913 И db_table LIKE «%%» product LIMIT 5000 - времяВы, похоже, имеете много записей в БД и разрешаете фильтрацию выполнять полное сканирование таблицы.
  3. Вы должны адаптировать дизайн таблицы под свои запросы.
...