Приветствую, хабра-сообщество! Думаю, многие, кто работал с базой данных Cassandra из PHP, знают, что все существующие драйвера используют интерфейс Thrift, который был объявлен устаревшим еще в версии 0.8. Вместо этого разработчики рекомендуют использовать новый интерфейс для доступа к базе данных CQL (Cassandra Query Language), однако для нового протокола уже очень давно не существует PHP-драйвера.
В официальном репозитории Датастакс Существуют драйверы для C++, Java, C# и Python. Как вы знаете, сам Php написан на C, а это значит, что, засучив рукава, мы можем подружить официальный асинхронный драйвер C++ с Php. Если кому-то интересно, что из этого получилось, пожалуйста, посмотрите кат. Как подключить плюскод к Php достаточно подробно описано на сайте зона разработчика Зенда .
Наверное, многие уже наткнулись на эту ссылку, если вас вообще интересовала разработка расширений для Php. Стоит обратить внимание на макрос PHP_REQUIRE_CXX() в config.m4, а также на необходимость вручную добавить библиотеку stdc++, если вы, конечно, использовали ее при разработке своего модуля.
Создание библиотеки Datastax C++ довольно тривиально, и все, что вам нужно сделать, это загрузить официальный драйвер.
Установите Boost, Openssl и Cmake для сборки, если они у вас еще не установлены, и скомпилируйте драйвер.git clone https://github.com/datastax/cpp-driver.git
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
После установки официального драйвера мы можем использовать нашу обертку: git clone https://github.com/aparkhomenko/php-cassandra.git
cd php-cassandra
phpize && .
/configure && make
Если в папке модулей нет ошибок, вы можете увидеть расширение для 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();
Теги: #php #NoSQL #cassandra #C++ #расширение php #разработка веб-сайтов #php
-
Как Преодолеть Трудности Работы На Дому
19 Oct, 24 -
Сертификат Участника «Download Day»
19 Oct, 24 -
Изменения В Строке. Ява 7
19 Oct, 24 -
3 Года Что Уже Сделано И Что Будет Дальше
19 Oct, 24