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

  Вітаю, хабрасообщество!
Думаю багато хто працював з базою 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();

  
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.