我正在尝试使用phpcassa libraray查询Cassandra 2.0.2服务器。
我做以下操作:
<?php
require('phpcassa/lib/autoload.php');
use phpcassaColumnFamily;
use phpcassaColumnSlice;
use phpcassaConnectionConnectionPool;
$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"例外。
在来源中阅读后,我看到这是因为列族'对话'没有被加载到Clougmn家族阵列中由ConnectionPool :: Docition_keyspace()方法。
当我使用以下代码打印" descrip_keyspace"的结果时,我可以看到,我的一个列族中只有一个称为user_profiles,正在加载到我的列家族阵列中。
<?php
require('phpcassa/lib/autoload.php');
use phpcassaColumnFamily;
use phpcassaColumnSlice;
use phpcassaConnectionConnectionPool;
$pool = new ConnectionPool('Cronnection', array('MY_SERVER_IP:9160'));
echo '<pre>';
var_dump($pool->describe_keyspace());
在该密钥空间中定义了6列系列,但phpcassa仅列出" user_profiles";" user_profiles"和其他CFS之间的唯一区别是" user_profiles"正在使用"与紧凑型存储"属性。
关于如何解决这个问题的想法,或者为什么发生这种情况?
谢谢!
ps:我使用cql3通过cqlsh创建了列族,当我使用cassandra-cli"描述"时,我看不到我的列族,只有我提到的" user_profiles",这可以有所相关吗?
是的,这实际上与COMPACT STORAGE
和cassandra-cli
没有显示其他列家族有关。phpcassa和其他基于旧货的客户端(例如cassandra-cli
)只能使用CQL3创建的表,如果它们是创建WITH COMPACT STORAGE
。
简而言之,如果您将使用phpcassa,建议您坚持使用COMPACT STORAGE
表。如果您想阅读更多信息,则有一篇有些高级文章说明了节俭,CQL3和紧凑的存储如何结合在一起。