Приветствую, хабрасообщество!
Думаю многие кто работал с базой 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'а достаточно тривиальна и все что вам необходимо это скачать официальный драйвер
Установить Boost, Openssl и Cmake для сборки, если они у вас ещё не установлены и скомпилировать драйвер
Хинт: make install необязательно делать, т. к. все что нам необходимо это библиотека libcql.so.0.7.0 на которую можно сделать симлинк
После установки официального драйвера мы можем использовать наш wrapper:
Если не возникло ошибок в папке modules можно будет увидеть extension для Php cassandra.so
Можем проверить, что он у нас работает корректно:
В списке модулей должна быть надпись cassandra. Если все получилось — поздравляю; если нет — прошу в комментарии :)
Интерфейс модуля повторяет интерфейс оригинального драйвера и содержит в себе классы: CqlBuilder, CqlCluster, CqlError, CqlFutureResult, CqlQuery, CqlSession, CqlResult.
Пример взаимодействия модуля:
Думаю многие кто работал с базой 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();