节俭 + 卡桑德拉 + PHP + Windows?

Thrift + Cassandra + PHP + Windows?

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

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

如果你看这个 link ,

  1. now we can compile php code for Cassandra using thrift I used command: d:\cassandra\trift\thrift.exe --gen php d:\cassandra\interface\cassandra.thrift

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

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

Could not open input file: d:\cassandra\interface\cassandra.thrift

这是怎么回事?

我该如何进行这项工作?

我试过安装 DataStax PHP Driver for Apache Cassandra and that documentation 甚至最差。

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

编辑:

来自README

Install the PHP extension

Installing with pecl

The PHP driver is not published to the official PECL repository yes. You can still install it using pecl by specifying the provided package.xml file path as the argument to pecl install command.

Install the 2.0 version of the C/C++ driver

not published to the official PECL repository yes - 是还是?

Obtaining Build Dependencies

CMake
Git
ActiveState Perl
Python v2.7.x

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

A batch script has been created to detect installed versions of Visual...

什么? 一个批处理脚本突然从哪来的??

然后,

First you will need to open a “Command Prompt” (or Windows SDK Command Prompt) to execute the batch script.

Usage: VC_BUILD.BAT [OPTION...]

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

....

这一堆'--'是干什么用的?

To build 32-bit shared library:

VC_BUILD.BAT --X86 To build 64-bit shared library:

VC_BUILD.BAT --X64

.BAT从何而来?我应该在里面放什么?我应该从哪里 运行 获取?

毕竟,那些 Build Dependencies 有什么用?我该如何使用它们??

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

编辑 2:

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

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

解决上述 git 问题后,我有一个新的 - 它只是冻结在那里,没有任何反应,

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

在您下载该文件的正确版本或者最好在 interface 文件夹的 downloaded Cassandra 包中找到它之后,按照您拥有的文档中的概述生成代码。剩下的应该很简单。

Why PHP modules do not come with Cassandra like it does for MongoDB? Most of the independent drivers I found are outdated, not supported anymore or abandoned.

我不太确定,但我的猜测是 CQL 现在被大量推广而不是使用原始的 Thrift API - 后者是一项复杂的任务,而 CQL更易于使用——这是它之所以如此的关键因素之一。它或多或少消除了对另一个包装器的需要。


PS:只是为了确定:

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

could not open input file cassandra.thrift

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

更新:

datastax PHP 驱动程序现已正式发布,二进制文件可供下载(无需自行构建):

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

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

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

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

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

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

忘了 Thrift 和 'beta',我找到了更好的 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();
}