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);

如果它不支持,是否有人可以为我提供一对多关系的替代解决方案?

4

2 回答 2

0

自 1.2 版以来,Cassandra 绝对支持集合 - 我不知道 PHP Cassa 但是您的陈述看起来正确,所以我会在客户端寻找解决方案。

另一种方法是使用复合键,其中键的第二部分是您想要在地图中使用的键

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) 
);

现在每个用户都有一个条目,而不是每个用户有一个条目,每个用户有很多条目。我已经将电子邮件、密码和状态设为静态,因为它们对于每个 mc_user_id 应该是相同的(我想到了两个主要优点:它们不会在每一行中复制,因此它们不会浪费磁盘空间并且您可以轻松更新它们仅使用 1 个更新语句,因为静态列只能通过分区键访问)。

您仍然可以仅使用 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 * from mc_user where mc_user_id=some_id

HTH 干杯,卡罗

于 2014-07-05T09:19:02.527 回答
0

可以尝试使用这个库。它不需要 Trift 并且使用二进制协议工作。

于 2014-07-21T11:50:49.227 回答