当我使用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);
如果不支持,是否有人能为我提供一对多关系的替代解决方案?
答案 0 :(得分: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,mapkey
检索“地图”条目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 干杯, 卡罗
答案 1 :(得分:0)
可以尝试使用this library。它不需要Trift并使用二进制协议。