4

我正在开发一个论坛项目,该项目允许用户从他的网络中关注某些主题的问题。

用户的新闻源墙仅包含由他的联系人发布并标记在关注的主题上的那些问题。我很困惑什么数据库的数据模型最适合这样的应用程序。到目前为止,我一直在研究 Cassandra 和 MySQL 解决方案。

在我研究了 Cassandra 之后,我意识到通过对用户的所有关注者执行关于用户帖子的快速写入,使用 Cassandra 可以轻松设计显示所有来自网络的帖子的简单新闻提要设计。但是对于我这种有“关注主题”的附加过滤器的应用程序,我无法用 Cassandra 中的良好模式设计来说服自己。我希望如果我因为对 cassandra 的了解不足而错过了什么,也许你能帮我提出如何在 Cassandra 中实现这个新闻提要的建议吗?

4

1 回答 1

4

我假设您已经研究过 Twissandra 示例应用程序。和你描述的非常接近。这里有几个有用的链接:

与您的应用程序的主要区别在于主题的介绍。如何存储数据取决于您希望如何查询数据。例如,您可能对所有主题都显示在同一时间线中感到满意,或者您可能希望能够仅查看特定主题的时间线(例如 SO 标签)。

如果您不需要单独的时间线,我推荐以下方法,使用 Twissandra 数据模型作为基础:

代替普通的 FOLLOWERS 列族,为每个主题的每个用户维护一行关注者。显然,这在创建/更改/删除用户时会导致一些额外的工作,但它会在创建新帖子时节省您的工作量,这是您需要处理的大部分操作。

当用户 Joe 就主题 A、B 和 C 发表帖子时,您将能够通过如下查询获得所有感兴趣的用户:

multiget(FOLLOWERS, ['Joe::A', 'Joe::B', 'Joe::C'])

其中 'Joe::A'、'Joe::B' 和 'Joe::C' 是行键。对于您返回的每个关注者,您只需将帖子的 UUID 作为列名称添加到每个关注者的时间线(并且您不必担心时间线中的重复,因为您对列使用相同的 UUID姓名)。

如果您希望能够为每个用户支持每个主题的时间线,我建议您为用户感兴趣的每个主题使用一行,为所有主题时间线使用一行。由于您已经按主题获取关注者,因此很容易知道帖子具有关注者感兴趣的主题,只需将帖子附加到正确的每个主题时间线。

于 2011-01-10T03:51:06.890 回答