【问题标题】:does map collection type support in cassandra 2.0cassandra 2.0 中是否支持地图集合类型
【发布时间】:2014-08-26 09:09:55
【问题描述】:

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

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

【问题讨论】:

    标签: php cassandra phpcassa


    【解决方案1】:

    自 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 干杯, 卡罗

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 2016-01-19
        • 2019-01-03
        • 2016-08-20
        • 2014-03-25
        • 2011-05-31
        • 2023-04-06
        • 2019-02-13
        • 1970-01-01
        相关资源
        最近更新 更多