2009-12-07 60 views
2

我在Erlang建立一个Reddit克隆。我正在考虑使用一些erlang web框架,但这不是问题。NoSql - 这是最适合我的需求 - 我有精神崩溃

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

它是如何工作的;

我有多个专用的reddits。例如,科学,搞笑,公司,体育。你可以考虑他们的子reddits。每个子reddit都有类别。

用户可以发布以下信息:

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

,并添加图片,链接。视频

与Reddit一样,用户将能够对 投票的故事和评论。评论也会有投票系统。

问题出在哪里;

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

现在我需要什么;

1)用户会去运动版(Subreddit),

他们会希望看到一个未来日期所有的故事,例如NFL类别,或足球世界杯类别,他们可能希望看到所有的故事与未来日期表示即将到来的游戏或事件。

但是,由于人们可能会发表垃圾,我需要说按未来日期排序,但然后过滤结果的帖子多5票,然后我需要显示最近的即将到来的事件。

所以如果周末有一场比赛而下一场比赛再次是3周,那么最接近的比赛需要首先出现。

2),因此上述问题,是使用一个数据库

1)查找版(Subreddit)的所有帖子:体育。 2)在NFL类别中找到al帖子。 3)查找未来日期的所有文章。通过最多投票和显示故事与最近日期到今天。

我想CouchDB的看起来像一个很好的候选人,但我不知道

但对于卡珊德拉,HBase的,了Riak,Neo4j的?

我要疯了试图弄清楚这一点。

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

请帮帮忙,谢谢

+0

MySQL和MySQL之前的Memcached会有可扩展性问题吗?假设你不必为每个访问者提供完全独特的数据,这可能是一个好方法,并且避免了进入NoSQL荒野的必要。 – 2009-12-07 02:09:57

+0

我对Couchdb中的视图系统有点不清楚。 我知道我可以建立多个视图来排序相同的数据。 但这个观点有多复杂? 可以查看 1)查找subreddit中的所有帖子:Sport。 2)查找NFL类别的所有文章。 3)查找具有未来日期的所有帖子。按大多数投票排序这些帖子,并显示与当天最近的日期。 WOuld我必须定义一个“每个subreddit”视图?因为我将拥有大约25,000个子目录。用户将能够在reddit中制作自己的reddit和类别。 – Toomanybrokenkeyboards 2009-12-07 02:12:46

+0

您不必为每个视图定义单独的视图。 Subreddit应该是你发出的键的第一个元素,所以你可以在你的请求中只选择一个使用from-to字段。但是,您将不得不为每个不同的排序都有一个单独的视图(不包括上升/下降)。 – Zed 2009-12-07 07:35:05

回答

2

卡桑德拉应该为你工作得很好; “用户对以不同方式展示的东西进行投票”听起来与Digg所做的非常相似(他们正在完全转向Cassandra)。

卡桑德拉的游戏名称是反规范化。因此,对于每个类别或子版本,您将有一个包含帖子的行。如果你一次只查询相对较少的故事,那么你可能会离开而不是反规范化发布信息(包括投票计数)本身,而只是用multiget。对于较大的批次,您应该将其复制到每个帖子列中,这样您就不必执行额外的获取。

如果您使用类似TimeUUID的方式来临时排列您的列,那么“在类别X中给我所有在今天的日期之后的所有内容”是微不足道的,然后您可以通过投票计数客户端进行排序。 (为什么不对服务器端进行排序?因为这不会扩展。)

+0

@jbellis - 顺便说一句,排序客户端意味着在JS或其他? – viksit 2010-02-25 19:25:45