1

用 PHP 连接 Cassandra 真的很痛苦。Apache 和 DataStax 的文档写得非常糟糕 - 对于 Windows 用户。

我通过 Chocolatey 安装了 Thrift(我相信!)。但我仍然无法 使用 thrift 为 Cassandra 编译 php 代码

如果您查看此链接

  1. 现在我们可以使用 thrift 为 Cassandra 编译 php 代码,我使用了命令:d:\cassandra\trift\thrift.exe --gen php d:\cassandra\interface\cassandra.thrift

那么它是什么cassandra.thrift以及它来自哪里?我应该在里面放什么??

如果我完全按照说明进行操作,我会收到此错误,

无法打开输入文件:d:\cassandra\interface\cassandra.thrift

在此处输入图像描述

那么发生了什么?

我该如何进行这项工作?

我曾尝试为 Apache Cassandra 安装 DataStax PHP 驱动程序,并且该文档甚至更糟糕。

为什么 PHP 模块不像 MongoDB 那样随 Cassandra 一起提供?我发现的大多数独立驱动程序都已过时,不再受支持或被放弃。

编辑:

自述文件中,

安装 PHP 扩展

使用 pecl 安装

PHP 驱动程序未发布到官方 PECL 存储库是的。您仍然可以通过将提供的 package.xml 文件路径指定为 pecl install 命令的参数来使用 pecl 安装它。

安装2.0版本的C/C++驱动

not published to the official PECL repository yes-?_

获取构建依赖

CMake
Git
ActiveState Perl
Python v2.7.x

我已经下载并安装了。那么,什么?在构建驱动程序中,

已创建一个批处理脚本来检测已安装的 Visual ...

什么?A批处理脚本突然从哪里来??

然后,

首先,您需要打开“命令提示符”(或 Windows SDK 命令提示符)来执行批处理脚本。

用法:VC_BUILD.BAT [选项...]

--DEBUG                           Enable debug build
--RELEASE                         Enable release build (default)
--DISABLE-CLEAN                   Disable clean build

……

这些“--”是干什么用的?

要构建 32 位共享库:

VC_BUILD.BAT --X86 构建 64 位共享库:

VC_BUILD.BAT --X64

.BAT来自哪里?我应该在里面放什么?我应该从哪里运行它?

毕竟,那些Build Dependencies是干什么用的?我如何使用它们?

只是希望有人能写一个合适的指南然后上面的指南 - 太可怕了!(如果你比较MongoDB中的指南,它会更好更专业)

编辑2:

当我从桌面运行 .bat 时出现第一个错误,

在此处输入图像描述

我已经安装了 git 但我仍然有这个错误,

在此处输入图像描述

在修复了上面的 git 问题后,我有了一个新的 - 它只是冻结在那里,没有任何反应,

在此处输入图像描述

4

3 回答 3

3

IDL 文件cassandra.thrift通常是 cassandra 包的一部分,但您可以通过上面的链接找到它。链接指向主干,您可能需要另一个版本。

在您下载该文件的正确版本或更好地在文件夹中下载的 Cassandra 包中找到它后interface,生成您拥有的文档中概述的代码。其余的应该很容易。

为什么 PHP 模块不像 MongoDB 那样随 Cassandra 一起提供?我发现的大多数独立驱动程序都已过时,不再受支持或被放弃。

我不太确定这一点,但我的猜测是,CQL 现在被大力推广了一段时间,而不是使用原始 Thrift API——后者是一项复杂的任务,而 CQL 更易于使用——是其中之一为什么会这样的关键因素。它或多或少地消除了对另一个包装器的需要。


PS:只是为了确定:

thrift.exe --gen php d:\cassandra\interface\cassandra.thrift

could not open input file cassandra.thrift

当然,您指向正确的驱动器、文件夹和文件,对吗?

于 2015-07-28T11:53:10.350 回答
1

忘记 Thrift 和“测试版”,我找到了更好的解决方案。它非常简单,非常容易!

示例代码,

require_once 'lib/Cassandra/Cassandra.php';

$cassandra = new Cassandra();

$s_server_host     = '127.0.0.1';    // Localhost
$i_server_port     = 9042;
$s_server_username = 'admin';  // We don't use username
$s_server_password = 'password';  // We don't use password
$s_server_keyspace = 'demo';  // We don't have created it yet

$cassandra->connect($s_server_host, $s_server_username, $s_server_password, $s_server_keyspace, $i_server_port);

// Tests if the connection was successful:
if ($cassandra) {

    // Select:
    // Queries a table.
    $cql = "SELECT * FROM users;";

    // Launch the query.
    $results = $cassandra->query($cql);

    // Update:
    // Prepares a statement.
    $stmt = $cassandra->prepare('UPDATE users SET first_name = ?, last_name = ? where id = ?');

    // Executes a prepared statement.
    $values = array('first_name' => 'Fred', 'last_name' => 'Smith', 'id' => '1');
    $result = $cassandra->execute($stmt, $values);

    // Insert:
    // Prepares a statement.
    $stmt = $cassandra->prepare('INSERT INTO users (id, first_name, last_name)
    VALUES (:id, :first_name, :last_name)');

    // Executes a prepared statement.
    $values = array('first_name' => 'John', 'last_name' => 'Robinson', 'id' => '4');
    $result = $cassandra->execute($stmt, $values);

    // Delete:
    // Prepares a statement.
    $stmt = $cassandra->prepare('DELETE FROM users WHERE id = :id');

    // Executes a prepared statement.
    $values = array('id' => '4');
    $result = $cassandra->execute($stmt, $values);

    // Closes the connection.
    $cassandra->close();
}
于 2015-07-30T08:35:59.257 回答
1

更新:

datastax PHP 驱动程序现在是 GA 并且可以下载二进制文件(无需自己构建):

https://github.com/datastax/php-driver

关于 DataStax PHP 驱动程序,在我输入时,根据您的反馈改进了说明。

因为这个驱动程序是Beta 版,我们还没有预编译的二进制文件,您可以简单地下载。一旦驱动程序是 GA,它们将可用。现在,您必须自己构建它们。

构建二进制文件的过程非常简单。1) 安装依赖项 2) 运行 vc_build.bat。

您可以在此处找到 vc_build.bat (只需右键单击浏览器中的另存为):

https://raw.githubusercontent.com/datastax/php-driver/master/ext/vc_build.bat

于 2015-07-28T18:35:38.303 回答