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 という列ファミリーの 1 つだけが列ファミリー配列に読み込まれていることがわかります。

<?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 に答える