0

仅供参考,这个问题并不完全基于 MongoDB,而是碰巧使用了 MongoDB。我假设我们最终可能会在一个好的设计中使用 MongoDB 的功能,例如分片,因此提到了 MongoDB。同样fwiw,我们使用Java。

所以我们在某个集合中有大约 1 亿条记录,我们需要在其中选择所有有一些数据集到明天的项目。通常此查询返回 1000 万条记录。

你可以认为我们手头有 N(比如十)台机器。我们可以假设,MongoDB 是基于 record_id 进行分片的。我们将处理的每条记录都独立于我们正在读取的其他记录。在此批处理作业中不会写入任何记录。

我想做的是,

  1. 不要将工作负载分布集中在不同的机器上。
  2. 公平或几乎公平的工作负载分配(不确定是否可以在不影响要求的情况下满足以下要求。1)
  3. 容错(如果其中一台批处理机器出现故障,我们希望其他机器承担其负载。)

任何好的解决方案,已经在类似的情况下工作?

4

1 回答 1

1

我可以在 MongoDB 的上下文中说话

要求 1 和 2 是通过分片完成的。我不确定我是否遵循您的问题,因为听起来 1 表示您不想集中工作负载,而 2 表示您希望平均分配工作负载。

无论如何,使用正确的分片键,您将在分片之间分配工作负载。http://docs.mongodb.org/manual/sharding/

要求 3 通过 MongoDB 中的副本集执行。http://docs.mongodb.org/manual/replication/

我必须更多地了解您的应用程序和用例才能确定,但​​是将 1000 万条记录提取为 100 万条记录,因为您的典型访问模式听起来不像正确的文档模型已经到位。请记住,集合 <> 表和文档 <> 记录。我会考虑以更高的逻辑粒度存储您的 10M 记录,以便您提取更少的记录;这将显着提高性能。

于 2013-08-17T01:50:24.140 回答