0

我正在尝试使用 phpcassa libraray 查询 Cassandra 2.0.2 服务器。

我执行以下操作:

<?php

require('phpcassa/lib/autoload.php');

use phpcassa\ColumnFamily;
use phpcassa\ColumnSlice;
use phpcassa\Connection\ConnectionPool;

$pool = new ConnectionPool('Cronnection', array('MY_SERVER_IP:9160'));

$conversations = new ColumnFamily($pool, 'conversations');

var_dump( $conversations->get('2521b0f0-8e36-11e3-a489-8f038e859082') );

当我这样做时,我得到一个未捕获的 'cassandra\NotFoundException' 异常。

在阅读源代码后,我发现这是因为列族“对话”没有被加载到 ConnectionPool::describe_keyspace() 方法创建的 cloumn 族数组中。

当我使用以下代码打印“describe_keyspace”的结果时,我可以看到只有一个名为 user_profiles 的列族被加载到我的列族数组中。

<?php

require('phpcassa/lib/autoload.php');

use phpcassa\ColumnFamily;
use phpcassa\ColumnSlice;
use phpcassa\Connection\ConnectionPool;

$pool = new ConnectionPool('Cronnection', array('MY_SERVER_IP:9160'));

echo '<pre>';
var_dump($pool->describe_keyspace());

该键空间中定义了 6 个列族,但 phpcassa 仅列出“user_profiles”;“user_profiles”和其他 CF 之间的唯一区别是“user_profiles”使用的是“WITH COMPACT STORAGE”属性。

关于如何解决这个问题或为什么会发生这种情况的任何想法?

谢谢!

PS:我通过 cqlsh 使用 CQL3 创建了列族,当我使用 cassandra-cli 进行“描述”时,我看不到我的列族,只有我提到的“user_profiles”一个,这可能有关联吗?

4

1 回答 1

2

是的,这实际上与您的其他列族有关COMPACT STORAGE,但并未显示。cassandra-cliphpcassa 和其他基于 Thrift 的客户端(例如cassandra-cli)只能使用通过 CQL3 创建的表(如果它们已创建WITH COMPACT STORAGE)。

简而言之,COMPACT STORAGE如果您将使用 phpcassa,我建议您坚持使用表格。如果您想了解更多,这里有一篇有点高级的文章,它解释了Thrift、CQL3 和紧凑型存储是如何结合在一起的。

于 2014-02-08T00:11:35.627 回答