仅供参考,这个问题并不完全基于 MongoDB,而是碰巧使用了 MongoDB。我假设我们最终可能会在一个好的设计中使用 MongoDB 的功能,例如分片,因此提到了 MongoDB。同样fwiw,我们使用Java。
所以我们在某个集合中有大约 1 亿条记录,我们需要在其中选择所有有一些数据集到明天的项目。通常此查询返回 1000 万条记录。
你可以认为我们手头有 N(比如十)台机器。我们可以假设,MongoDB 是基于 record_id 进行分片的。我们将处理的每条记录都独立于我们正在读取的其他记录。在此批处理作业中不会写入任何记录。
我想做的是,
- 不要将工作负载分布集中在不同的机器上。
- 公平或几乎公平的工作负载分配(不确定是否可以在不影响要求的情况下满足以下要求。1)
- 容错(如果其中一台批处理机器出现故障,我们希望其他机器承担其负载。)
任何好的解决方案,已经在类似的情况下工作?