2011-01-09 77 views
4

我正在开发一个论坛项目,该项目允许用户从他的网络上关注特定主题的问题。cassandra的架构设计

用户的新闻馈送墙只包含那些已由他的连接发布并在后面的主题上标记的问题。我很困惑什么数据库的数据模型最适合这样的应用程序。 截至目前,我一直在寻找Cassandra和MySQL解决方案。

在我学习Cassandra之后,我意识到简单的新闻馈送设计可以显示网络中的所有帖子,使用Cassandra可以很容易地设计用户关于帖子的所有追随者的快速写入。 但是对于那些有额外的'后续主题'过滤器的应用,我无法用Cassandra中的良好模式设计说服自己。我希望如果我因为对卡桑德拉的理解不够而错过了一些东西,请问您能否就您如何在Cassandra中实施这个新闻提供的建议提供帮助?

回答

4

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

与应用程序的主要区别是引入主题。你如何存储数据取决于你想如何查询它。例如,对于所有主题在同一时间线上呈现的情况,您可能没有问题,或者您可能希望只能看到特定主题的时间轴(例如SO标签)。

如果你不需要单独的时间表,以下笔者推荐使用Twissandra数据模型为基础:

而不是正常的追随者列的家庭,维持追随者一行对每个用户每个话题。很显然,这会在创建/更改/删除用户时造成一些额外的工作,但在创建新帖子时这会节省您的工作量,这是您需要处理的大部分操作。

当后由用户Joe的专题A,B和C做,你就可以得到所有感兴趣的用户有相似的查询:

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

其中“乔:: A','Joe :: B'和'Joe :: C'是行键。对于每个追随者,您可以简单地将帖子的UUID作为列名添加到每个追随者的时间轴上(并且您不必担心时间轴中的重复项,因为您对列使用相同的UUID名称)。

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

+0

链接死了这是一个相当古老的问题,虽然 – Ced 2016-10-16 02:23:40