Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Асинхронный Php extension для работы с бд Cassandra без Thrift

Anna | 29.05.2014 | нет комментариев

Приветствую, програсообщество!
Думаю многие кто работал с базой Cassandra из php знают, что все существующие драйвера применяют в себе Thrift интерфейс, тот, что объявлен как deprecated ещё в версии 0.8.
Взамен него разработчики рекомендуют применять новейший интерфейс доступа к базе CQL (Cassandra Query Language), но драйвера под php для нового протокола теснее дюже долгое время нет. В официальном репозитории Datastax существуют драйвера для C , Java, C# и Python. Как вестимо сам Php написан на Си, а значит, закатав рукава мы можем подружить формальный асинхронный драйвер C с Php. Кому увлекательно что из этого получилось — умоляю под кат.

Как подружить плюсовый код с Php довольно детально описано на девзоне зенда. Видимо многим эта ссылка теснее попадалась, если вы хоть как-то интересовались разработкой растяжений под Php. Следует обратить внимание на макрос PHP_REQUIRE_CXX() в config.m4, а также на надобность ручного добавления библиотеки stdc , если, безусловно, вы её применяли при разработке своего модуля.

Сборка C библиотеки Datastax’а довольно банальна и все что вам нужно это скачать формальный драйвер

git clone https://github.com/datastax/cpp-driver.git

Установить Boost, Openssl и Cmake для сборки, если они у вас ещё не установлены и скомпилировать драйвер

cd cpp-driver
cmake . && make && make install

Хинт: make install необязательно делать, т. к. все что нам нужно это библиотека libcql.so.0.7.0 на которую дозволено сделать симлинк

ln -s libcql.so.0.7.0 /usr/lib/libcql.so.0
ln -s /usr/lib/libcql.so.0 /usr/lib/libcql.so

Позже установки официального драйвера мы можем применять наш wrapper:

git clone https://github.com/aparkhomenko/php-cassandra.git
cd php-cassandra
phpize && ./configure && make

Если не появилось ошибок в папке modules дозволено будет увидеть extension для Php cassandra.so
Можем проверить, что он у нас работает правильно:

php -d="extension=modules/cassandra.so" -m

В списке модулей должна быть надпись cassandra. Если все получилось — поздравляю; если нет — умоляю в комментарии :)

Интерфейс модуля повторяет интерфейс подлинного драйвера и содержит в себе классы: CqlBuilder, CqlCluster, CqlError, CqlFutureResult, CqlQuery, CqlSession, CqlResult.

Пример взаимодействия модуля:

// Suppose you have the Cassandra cluster at 127.0.0.1, 
// listening at default port (9042).
$builder  = new CqlBuilder();
$builder->addContactPoint("127.0.0.1");

// Now build a model of cluster and connect it to DB.
$cluster  = $builder->build();
$session  = $cluster->connect();

// Write a query, switch keyspaces.
$query    = new CqlQuery('SELECT * FROM system.schema_keyspaces');

// Send the query.
$future   = $session->query($query);

// Wait for the query to execute; retrieve the result.
$future->wait();
$result   = $future->getResult();

if (null === $future->getError()) {

    echo "rowCount: {$result->getRowCount()}n";

    while ($result->next()) {
        echo "strategy_options: " . $result->get("strategy_options") . "n";
    }

}

// Boilerplate: close the connection session and perform the cleanup.
$session->close();
$cluster->shutdown();
Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB