【问题标题】:Thrift + Cassandra + PHP + Windows?节俭 + Cassandra + PHP + Windows?
【发布时间】:2015-10-18 16:36:16
【问题描述】:

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

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

如果你看这个link

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

那么cassandra.thrift 是什么,它从何而来?我应该在里面放什么??

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

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

那到底是怎么回事?

我该如何进行这项工作?

我曾尝试安装DataStax PHP Driver for Apache Cassandra,而那个documentation 更糟糕。

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

编辑:

来自README

安装 PHP 扩展

使用 pecl 安装

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

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

not published to the official PECL repository yes - 还是

Obtaining Build Dependencies

CMake
Git
ActiveState Perl
Python v2.7.x

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

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

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

那么,

首先,您需要打开“命令提示符”(或 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 问题后,我有了一个新的 - 它只是冻结在那里,没有任何反应,

【问题讨论】:

  • DataStax 驱动程序到底在哪里卡住了?说文档最糟糕实际上并不具有建设性。说明您的具体问题,他们将得到解决。或者提交 PR。它是开源的。
  • @phact 请看我上面的编辑。谢谢。

标签: php thrift cassandra-2.0 datastax datastax-php-driver


【解决方案1】:

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

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

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

对此我不太确定,但我的猜测是,CQL 被大力推广了一段时间,而不是使用原始 Thrift API - 后者是一项复杂的任务,而 CQL 更易于使用 -是这种方式的关键因素之一。它或多或少地消除了对另一个包装器的需要。


PS:只是为了确定:

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

could not open input file cassandra.thrift

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

【讨论】:

  • 感谢您的回答。我的问题不在于我是否 point to the right drives, folders and files,而是 - cassandra.thrift 是什么以及我应该在 .thrift 中放入什么脚本。
  • 正如 phact 指出的那样,thrift is a legacy protocol that will be deprecated in favor of CQL so your best bet is the DataStax driver. 所以 DataStax 驱动程序实际上是最大的痛苦。我完全看不懂github.com/datastax/php-driver/blob/master/ext/README.mddatastax.github.io/cpp-driver/topics/building 的安装说明。他们只是写得不好。
  • 你不要在里面放任何东西。您需要在下载包中找到该文件,然后简单地使用它来生成 PHP 代码。如果它不在包中(出于任何奇怪的原因),您可以从源代码树中提取。
  • Cassandra Thrift API 被 Cassandra 人视为遗产。 Thrift 本身绝不是“遗产”。非常重要的区别。
【解决方案2】:

忘记 Thrift 和“测试版”吧,我找到了更好的 solution。它非常简单,非常简单!

示例代码,

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();
}

【讨论】:

  • 我认为我们应该只在它是php官方驱动程序的一部分时才考虑datatax驱动程序。在此之前,我宁愿不惜一切代价避免它,因为它对 Windows 用户的安装很复杂。
【解决方案3】:

更新:

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

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

关于 DataStax PHP 驱动程序,正在根据您的反馈改进说明。

由于此驱动程序位于 Beta 中,因此我们还没有预编译的二进制文件,您可以直接下载。一旦驱动程序是 GA,它们将可用。现在,您必须自己构建它们。

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

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

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

【讨论】:

  • 感谢您简化说明。但是` 2) 运行vc_build.bat。` - 我从哪里运行.bat?我需要从 CMD 运行它吗?
  • 好吧,如果我只是通过单击在我的桌面上运行.bat,我会一个接一个地出错。它只是不工作! (见我的编辑2。谢谢)
猜你喜欢
  • 2015-11-09
  • 2012-12-12
  • 2020-05-04
  • 2016-03-09
  • 2015-01-23
  • 2015-04-19
  • 2011-02-15
  • 2012-07-11
  • 2012-11-28
相关资源
最近更新 更多