NoSql - 最适合我的需求 - 我正在精神崩溃

时间:2009-12-07 02:05:43

标签: erlang couchdb cassandra neo4j riak

我正在Erlang中构建一个Reddit克隆。我正在考虑使用一些erlang web框架,但这不是问题。

我在选择数据库时遇到问题。

工作原理;

我有多个专用的reddits。例子,科学,有趣,企业,运动。你可以认为它们是sub reddits。每个子reddit都有类别。

用户可以发布以下信息:

标题, 类别 标签, 描述, 类别, 未来日期

并添加图片,链接。视频

与Reddit一样,用户可以投票 故事和评论。评论也将有投票制度。

问题如何;

我不知道使用什么NoSQL数据库,该网站将具有Mysql的可扩展性问题(相信我它会不会建议sql)如果不是更多,将会有大约10,000-20,000个并发连接。

现在我需要什么;

1)用户将转到sporting subreddit,

他们希望看到所有带有未来日期的故事,例如NFL类别或足球世界杯类别,他们可能希望看到所有未来日期的故事表示即将举行的比赛或活动。

但由于人们可能会发布废话,我需要按照未来日期排序,但是然后按照超过5票的帖子过滤结果,然后我需要显示最近的即将发生的事件。

因此,如果周末有一场比赛,下一场比赛又是3周,那么最接近的比赛需要先出现。

2)所以上面的问题是使用一个数据库

1)查找subreddit中的所有帖子:体育。 2)查找 NFL 类别中的帖子。 3)查找未来日期的所有帖子。按最多选票对这些帖子进行排序,并将最近日期的故事显示到今天。

我认为couchdb看起来像个好人,但我不确定

但是Cassandra,Hbase,Riak,neo4j怎么样?

我疯狂地试图解决这个问题。

我需要能够扩展和处理大量用户的东西。

请帮忙,谢谢

1 个答案:

答案 0 :(得分:2)

卡珊德拉应该适合你; “用户对以不同方式显示的内容进行投票”听起来与Digg正在做的非常相似(他们正在完全转向Cassandra)。

Cassandra的游戏名称是非规范化。因此,对于每个类别或subreddit,您将有一行包含帖子。如果你一次查询相对较少数量的故事,你可能会在没有对帖子信息(包括投票数量)本身进行非规范化的情况下离开,而只是将其复制。对于较大的批次,您应该将其复制到每个帖子列中,这样您就不必进行额外的获取。

如果你使用像TimeUUID这样的东西按时间顺序排列你的列,那么“在今天的日期之后给我类别X中的所有内容”是微不足道的,然后按投票计数客户端排序。 (为什么不对服务器端进行排序?因为这不能扩展。)