【问题标题】:phpcassa: cassandra\NotFoundException when instantiating ColumnFamily classphpcassa:实例化 ColumnFamily 类时出现 cassandra\NotFoundException
【发布时间】:2014-03-04 09:30:39
【问题描述】:

我正在尝试使用 phpcassa 库查询 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() 方法创建的列族数组中。

当我使用以下代码打印“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”列族,这可能有关联吗?

【问题讨论】:

    标签: cassandra cql cql3 phpcassa cassandra-2.0


    【解决方案1】:

    是的,这实际上与COMPACT STORAGEcassandra-cli 没有显示您的其他列族有关。 phpcassa 和其他基于 Thrift 的客户端(例如 cassandra-cli)只能使用通过 CQL3 创建的表,前提是它们是由 WITH COMPACT STORAGE 创建的。

    简而言之,如果您将使用 phpcassa,我建议坚持使用COMPACT STORAGE 表。如果你想了解更多,这里有一篇有点高级的文章,它解释了Thrift, CQL3 and compact storage fit together 是如何做到的。

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2012-02-11
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      相关资源
      最近更新 更多