Cassandra如何模拟连接语句

时间:2016-07-23 00:01:02

标签: cassandra cassandra-2.0 nosql

我是cassandra的新手,来自Postgres。我想知道是否有一种方法可以从2个不同的表或列族中获取数据,然后返回结果。我有这个查询

select p.fullname,p.picture s.post, s.id, s.comments, s.state, s.city FROM profiles as p INNER JOIN Chats as s ON(p.id==s.profile_id) WHERE s.latitudes>=28 AND 29>= s.latitudes AND s.longitudes
    ">=-21 AND -23>= s.longitudes 

查询有2个表:个人资料和聊天,他们都共享一个公共字段 Chats.id == Proifles.profile_id 它归结为基本返回聊天ID等于个人资料的所有行ID。我想保持这种方式,因为现在更新配置文件很简单,每个配置文件更新只需要更新1行,而不是对所有内容进行反规范化并更新数千条记录。任何帮助或建议都会很棒

1 个答案:

答案 0 :(得分:2)

您必须按照您不需要加入的方式设计表格。最佳做法是,您的表格与其用于的用例完全匹配。

Cassadra有一个名为shared static columns的功能;这允许您将值与主键的分区部分绑定。因此,您可以创建"加入"没有重复的表格版本。

CREATE TABLE t (
    p_id uuid,
    p_fullname text STATIC,
    p_picture text STATIC,
    s_id uuid,
    s_post text,
    s_comments text,
    s_state text,
    s_city text,
    PRIMARY KEY (p_id, s_id)
);