我正在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怎么样?
我疯狂地试图解决这个问题。
我需要能够扩展和处理大量用户的东西。
请帮忙,谢谢
答案 0 :(得分:2)
卡珊德拉应该适合你; “用户对以不同方式显示的内容进行投票”听起来与Digg正在做的非常相似(他们正在完全转向Cassandra)。
Cassandra的游戏名称是非规范化。因此,对于每个类别或subreddit,您将有一行包含帖子。如果你一次查询相对较少数量的故事,你可能会在没有对帖子信息(包括投票数量)本身进行非规范化的情况下离开,而只是将其复制。对于较大的批次,您应该将其复制到每个帖子列中,这样您就不必进行额外的获取。
如果你使用像TimeUUID这样的东西按时间顺序排列你的列,那么“在今天的日期之后给我类别X中的所有内容”是微不足道的,然后按投票计数客户端排序。 (为什么不对服务器端进行排序?因为这不能扩展。)