我正在开展一个论坛项目,允许用户通过他的网络关注某些主题的问题。
用户的新闻供稿墙仅包含由其关联发布并在所关注主题上标记的问题。我很困惑数据库的数据模型最适合这样的应用程序。 我一直在关注Cassandra和MySQL解决方案。
在我对Cassandra的研究之后,我意识到简单的新闻提要设计显示了来自网络的所有帖子,使用Cassandra很容易设计,通过快速写入用户的所有关注者关于用户的帖子。 但对于我的应用程序,其中有一个“跟随主题”的额外过滤器,我无法说服自己在Cassandra中使用良好的模式设计。我希望如果因为我对cassandra的简短了解而遗漏了一些东西,或许,请你帮我解决一下你如何在Cassandra实施这个新闻的建议?
答案 0 :(得分: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名称)。
如果您希望能够为每个用户支持每个主题的时间表,我建议您为用户感兴趣的每个主题使用一行,为所有主题时间轴使用一行。由于您已经按主题获取关注者,因此很容易知道关注者所关注的帖子有哪些主题,而是将帖子附加到正确的每个主题时间轴。