需要cassandra中的架构建议

时间:2015-06-14 03:55:32

标签: cassandra cql cql3 datastax-java-driver cqlsh

这是我的表格:

create table user
(
userId uuid primary key,
name text
)

create table comment_by_post
(
postId uuid,
cmntId timeuuid,
cmntTxt text,
cmntBy uuid,
primary key (postId, cmntId)
)

create table post_likes
(
postId uuid,
userId uuid,
primary key (postId, userId)
)

这里我的问题很少

  1. 我如何知道用户对来自comment_by_post表的帖子发表了评论?

  2. 如何订购评论。

  3. post_likes

  4. 中订购帖子
  5. 如果用户被删除,则应删除所有表中给定用户ID的所有条目。

  6. 要运行这些查询,我必须在架构中进行哪些更改?

1 个答案:

答案 0 :(得分:3)

在Cassandra中,通常每个查询需要一个表。所以看看你的select语句并开始创建表。

  1. 我如何知道用户对comment_by_post表中的帖子发表了评论?
  2. create table comment_by_post_user
    (
        postId uuid,
        userId uuid,
        cmntId timeuuid,
        cmntTxt text,
        cmntBy uuid,
        primary key (postId, userId,commentId)
        )
    
        select * from comment_by_post_user where postId = <> and userId = <>;
    
    1. 如何订购评论。
    2. create table comment_by_post
      (
          postId uuid,
          userId uuid,
          cmntId timeuuid,
          cmntTxt text,
          cmntBy uuid,
          primary key (postId,commentId)
          ) WITH CLUSTERING ORDER BY (commentId) desc;
      
          select * from comment_by_post where postId = in_postId limit 10;
      

      这将为您提供该帖子的最新10条评论。

      1. 在post_likes表中订购帖子
      2. create table post_likes
        (
        postId uuid,
        liked_at timstamp,
        userId uuid,
        primary key (postId, liked_at)
        ) WITH CLUSTERING ORDER BY (liked_at) desc;
        
        select * from post_likes limit 10;
        
        1. 如果用户被删除,则应从所有表中删除给定用户ID的所有条目。
        2. 这不是直接可行的。要从表中删除,您需要知道整个PRIMARY KEY。

          一种解决方案是创建另一个表,其中userId为PRIMARY KEY,其他表的其余PRIMARY KEY为该表的列。

          create table user
          (
          userId uuid primary key,
          postId uuid,
          cmntId timeuuid
          )