2012-12-25 28 views
-4

存储一个分数Twitter的流水与MongoDB的我期待满足以下要求:在EC2上

  1. 商店很多很多的鸣叫(比如500万,每天)和相关的用户配置文件。
  2. 能够查询数据(让我在时间X和时间Y之间创建的所有推文)。
  3. 随着数据大小的增加,能够将服务器添加到群集。

我不熟悉MongoDB。

A.我可以通过MongoDB满足上述条件吗?

B.如果我要使用EC2来完成上述操作,那么您会推荐什么硬件规格: 例如:从2个大型实例开始,每个大型实例附有500GB的EBS。

谢谢。

谢谢。

+1

您需要构建一个测试系统并对其进行基准测试并与其他未指定的用例进行匹配。正如他们所描述的,可能有办法让任何现代数据库系统支持您的需求。 – WiredPrairie

+0

我不只是评论一个更广泛的版本?无论如何,我同意你需要在发布之前进行更多的研究和测试。我的意思是你有这种情况,你问的是一种你不熟悉的技术。你需要多研究一下 – Sammaye

+0

@Sammaye,我考虑了你的观点,并删除了这个问题,并将其缩小到我认为更易处理的地步。而且,如果有人问我同样的问题说MySQL,我可以为他们回答,我很乐意这样做。我正在做更多的研究,但我认为能够接触到走在我面前的人是这个网站的重点。 – user1172468

回答

3

真的,你的问题缺乏任何真正的研究你的结局,因为它是不清楚和脱离主题一点,但我会给一些关于该主题的指针;也许他们会帮助你。

是的,MongoDB就像MySQL或MSSQL或Postgres SQL可以处理这个工作量。这个数据集对于数据库来说并不新鲜。是的,我猜想如果您每秒存储9,000条推文,每天存储5亿条新闻(http://yearinreview.twitter.com/en/tps.html),那么您可能需要非常小心地查看您的技术选择(正如Twitter在选择走NoSQL路线时所做的那样),但您要存储的很多比这少得多。但即使在这种情况下,已经证明,通过正确的设置(Facebook在这里),MySQL也可以处理类似的负载。

所以这不是一个问题:这个数据库可以处理这个吗?这是更多的问题:我的数据库如何处理这个问题?

我要提到的第一件事是做更多的研究,服务器集群如何构建在MongoDB中,我可以肯定地说,如果你需要的副本(http://docs.mongodb.org/manual/replication/)和碎片(http://docs.mongodb.org/manual/sharding/),就需要两个以上的服务器。

如果你真的想要我的个人意见,我选择不去购买更多资源较大的服务器,如大型实例,并决定选择更小的服务器。它们证明更便宜,而且从长远来看更容易管理。

现在谈论数据库如何处理这个问题。我已经介绍了分片和副本集。这两部分对您来说非常重要,可以使您的数据库顺利扩展到群集中,并保持数据的一致性和可用性,但这只是其中一部分。你还必须有正确的工作组和正确的索引和正确的模式(在那里有很多权利,而不是英国的错误 - 故意的)。

我可以想像,你将有两个集合了这一点,user收集和tweet收集与_id也许索引用户和user_idtweet。您可能会将这些文件转换为分片键,并将tweet集合拆分为user_id,这样您只需查询一台计算机即可快速将用户推文排列在多台计算机上,而无需进行全局分散和收集操作。然而,考虑到你可能也必须做时间操作(在x和y之间得到推文日期),你可能想要查看一些基于时间的分片索引,我不确定;这是为了您的测试。

这应该让你开始思考和研究你的用例的MongoDB。

希望它有帮助,