Apache Cassandra - 关于Twissandra示例的关注/取消关注关系

时间:2016-04-15 07:46:41

标签: twitter cassandra data-modeling

我试图通过查看Twissandra project来学习Cassandra建模。

似乎当用户取消关注其中一个关注者时,只会从表中删除友情/关注关系,但未关注用户的推文会保留在刚刚取消关注他的用户的时间轴中。

此外,由于我目前对Cassandra建模有非常基本的了解,在我看来,从时间线上移除推文实际上是不可能的。这是来自Twissandra的模型:

  CREATE TABLE timeline (
    username text,
    time timeuuid,
    tweet_id uuid,
    PRIMARY KEY (username, time)
  ) WITH CLUSTERING ORDER BY (time DESC)

由于tweet_id既不是分区键也不是聚类列,因此无法通过它进行查询并删除记录。

此外,有人可以建议一个模型,可以从时间线中删除未关注用户的推文。

我一直在解决这个问题一天,似乎在Cassandra这不是一件容易的事情。我来自关系世界,所以也许我的观点也是错误的。

1 个答案:

答案 0 :(得分:0)

  

由于tweet_id既不是分区键也不是聚类列,因此无法通过它进行查询并删除记录。

CREATE TABLE timeline (
    username text,
    tweet_id timeuuid,
    tweet_content text
    PRIMARY KEY (username, tweet_id)
  ) WITH CLUSTERING ORDER BY (tweet_id DESC)

上述数据模型应该可以解决问题

  

此外,有人可以建议一个模型,可以从时间线中删除未被关注用户的推文。

您必须非规范化并创建另一个表

CREATE TABLE followed_users_tweets(
    username text,
    followed_user text,
    tweet_id timeuuid,
    tweet_content text
    PRIMARY KEY ((username,followed_user) tweet_id)
) WITH CLUSTERING ORDER BY (tweet_id DESC);

当你取消关注" John DOE"你的用户名是" Helen SU​​E":

DELETE FROM followed_users_tweets WHERE username='Helen SUE' AND followed_user='John DOE'