在cassandra 2.0中映射集合类型支持

时间:2014-07-05 07:51:36

标签: php cassandra phpcassa

当我使用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);

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

2 个答案:

答案 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并使用二进制协议。