1

phpcassaを使用してcassandra 2.0でテーブルを作成すると、次のようなエラーが発生しました

 Fatal error: Uncaught exception 'cassandra\InvalidRequestException' with message 'line 2:25 mismatched input 'map' expecting set null' in /var/www/assignment1/lib/thrift/Thrift.php:574

私のコードは次のようになります

 $raw->client->execute_cql_query("CREATE TABLE 
mc_user(mc_user_id uuid primary key ,mc_user_email varchar,mc_user_pwd varchar,mc_status varchar,mc_user_type map<varchar,varchar>)", Compression::NONE);

サポートしていない場合、1対多の関係の代替ソリューションを誰かに教えてもらえますか?

4

2 に答える 2

0

このライブラリを使用してみることができます。Trift を必要とせず、バイナリ プロトコルを使用して動作します。

于 2014-07-21T11:50:49.227 に答える
0

コレクションは、バージョン 1.2 以降の Cassandra で確実にサポートされています。PHP Cassa はわかりませんが、あなたのステートメントは正しいように見えるので、クライアント側で解決策を探します。

別の方法として、キーの 2 番目の部分がマップで使用したいキーである複合キーを使用することもできます。

CREATE TABLE mc_user(
    mc_user_id uuid,
    themapkey varchar,
    mc_user_email varchar static,
    mc_user_pwd varchar static,
    mc_status varchar static,
    themapvalue varchar,
    PRIMARY KEY (mc_user_id, themapkey) 
);

マップを使用してユーザーごとに 1 つのエントリを持つ代わりに、ユーザーごとに多くのエントリを持つようになりました。各 mc_user_id で同じにする必要があるため、電子メール、パスワード、およびステータスを静的にしました (2 つの主な利点が思い浮かびます: 各行に複製されないため、ディスク容量を無駄にせず、簡単に更新できます)。静的列はパーティション キーによってのみアクセス可能であるため、1 つの update ステートメントのみを使用します)。

mc_user_id でのみユーザーの情報 (現在は静的) を取得できます

select mc_user_email, mc_status from mc_user where mc_user_id=some_id

mc_user_id、themapkey で「マップ」エントリを取得できます

select themapvalue from mc_user where mc_user_id=some_id and themapkey=some_key

select * ですべてのマップを簡単に再構築することもできます

select * from mc_user where mc_user_id=some_id

HTH 乾杯、カルロ

于 2014-07-05T09:19:02.527 に答える