-4

我希望满足以下要求:

  1. 存储大量推文(比如每天 500 万条)和相关的用户资料。
  2. 能够查询数据(获取在时间 X 和时间 Y 之间创建的所有推文)。
  3. 随着数据大小的增加,能够将服务器添加到集群中。

我对 MongoDB 不熟悉。

A. 我可以用 MongoDB 满足上述要求吗?

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

谢谢。

谢谢。

4

1 回答 1

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/)您将需要两个以上的服务器。

如果您真的想要我对此的个人意见,我选择不使用资源较多的服务器,例如大型实例,而是决定使用数量更多的小型服务器。从长远来看,它们被证明更便宜,实际上更容易管理。

Now talking about how a database can handle this again. I have introduced sharding and replica sets. These two parts will be extremely important to you to keep your database scaling well into a cluster and to keep consistency and availability of your data but this is only one part. You must also have the right working set and the right indexes and the right schema (a lot of rights there, not an English mistake - intentional).

I can imagine you will have two collections for this, a user collection and a tweet collection with maybe indexes on _id for a user and user_id for tweet. You will probably make those into shard keys as well splitting the tweet collection on user_id so you can quickly range a users tweets across multiple computers by only querying one computer instead of doing a global scatter and gather operation. However considering you might have to do time operations too (get tweets between x and y date) you might want to look into some time based shard index instead, I am unsure; this is for your testing.

That should get you started on thinking and researching into MongoDB for your use case.

Hope it helps,

于 2012-12-25T17:53:45.820 回答