@junart

Phpcassa library — почему возникает каждый раз ошибка — с подробностями?

Структура таблицы:
CREATE TABLE posts_user (
  post_id  bigint,
  post_at  timestamp,
  user_id  bigint,
  PRIMARY KEY ((post_id), post_at)
)
WITH CLUSTERING ORDER BY (post_at DESC) AND COMPACT STORAGE;


PHP код:
<?php
require_once(__DIR__.'/phpcassa/lib/autoload.php');
use phpcassa\Connection\ConnectionPool;
use phpcassa\ColumnFamily;
use phpcassa\SystemManager;
use phpcassa\Schema\StrategyClass;

class Cassandra {

        public $c;

        function __construct() {
            $pool = new ConnectionPool('<b>feed</b>', array('127.0.0.1:9160'));
            $this->c = new ColumnFamily($pool, '<b>posts_user</b>');
        }

        public function insert(){
            $num =  rand(1, 500);
            $this->c->insert($num, array('post_at' => time(), 'user_id' => '1')); //Здесь возникает ошибка при добавлении
            //$results = $this->c->get("1");
        }
}
?>


Вставка записи через конcоль (успешно была добавлена запись):

cqlsh:feed> INSERT INTO posts_user (post_at, user_id, post_id) VALUES (1408827330, 3, 169);


Ошибка в PHP при использовании функции insert():
Fatal error: Uncaught exception 'cassandra\InvalidRequestException' in /home/who/public_html/application/libraries/phpcassa/lib/Thrift/Base/TBase.php:206 Stack trace: #0 /home/who/public_html/application/libraries/phpcassa/lib/cassandra/Cassandra.php(3859): Thrift\Base\TBase->_read('Cassandra_batch...', Array, Object(Thrift\Protocol\TBinaryProtocolAccelerated)) #1 /home/who/public_html/application/libraries/phpcassa/lib/cassandra/Cassandra.php(939): cassandra\Cassandra_batch_mutate_result->read(Object(Thrift\Protocol\TBinaryProtocolAccelerated)) #2 /home/who/public_html/application/libraries/phpcassa/lib/cassandra/Cassandra.php(901): cassandra\CassandraClient->recv_batch_mutate() #3 [internal function]: cassandra\CassandraClient->batch_mutate(Array, 1) #4 /home/who/public_html/application/libraries/phpcassa/lib/phpcassa/Connection/ConnectionPool.php(264): call_user_func_array(Array, Array) #5 /home/who/public_html/application/libraries/phpcassa/lib/phpcassa/AbstractColumnFamily.php(686): phpc in /home/who/public_html/application/libraries/phpcassa/lib/Thrift/Base/TBase.php on line 206


Участок кода, где возникла ошибка:
// File TBase.php:206
 $this->$var = new $class();

// Переменная $class - \cassandra\KsDef187\cassandra\InvalidRequestException


Справка phpcassa:
ссылка

Библиотека phpcassa скачена с ресурса:
https://github.com/thobbs/phpcassa

Установленная версия Cassandra:
[cqlsh 4.1.1 | Cassandra 2.0.9 | CQL spec 3.1.1 | Thrift protocol 19.39.0]


Возможно, дело в тонкостях Cassandra (кэш, не установленные дополнительные параметры при создании колонки posts_user), но через консоль запрос сработал. Так же есть предположение, что где-то PHP скрипт долго выполняется и выбивает на исключение. Ко всему, не разобрался для чего параметр COMPACT STORAGE в CREATE.

Спасибо заранее всем, кто поможет с данной задачей, потратил много дней, причину не выявил...
  • Вопрос задан
  • 2591 просмотр
Пригласить эксперта
Ответы на вопрос 2
@1Michael1
что-то мне подсказывает, что проблема в коннекшене... при new ConnectionPool коннекшн еще не создается. коннекшн инициализируется тогда, когда проходит сам insert
а так как коннекшн не может проинициализироваться - падает с эксепшеном
Ответ написан
akalend
@akalend
программирую
используй нативный протокол и CQL https://code.google.com/a/apache-extras.org/p/cass... или любой другой с www.planetcassandra.org/client-drivers-tools/#PHP и не мучайся

вообще в Кассандре случаются баги, когда таблица создавалась по трифту а используется нативно, то же при вставке данных, те данные вставляются по трифту в таблицу созданную из CQL или наоборот . Можно увидеть не все созданные поля и тп. Трифт считается устаревшим протоколом и его РЕКОМЕНДУЮТ НЕ ИСПОЛЬЗОВАТЬ

т.е. надо использовать либо только трифт либо только натив иначе будут сплошные грабли да камни. А так как под трифт нет инструментов, то и использовать его не стоит
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы