MongoDB相关的扩展问题

时间:2013-08-16 23:06:13

标签: java mongodb design-patterns mapreduce

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

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

你可以认为我们手上有N台机器。我们可以假设,MongoDB基于record_id进行分片。 我们将处理的每条记录都与我们正在阅读的其他记录无关。作为此批处理作业的一部分,不会写入任何记录。

我期待的是,

  1. 不要在不同的机器上集中工作负载分配。
  2. 公平或近乎公平的工作量分配 (不确定是否可以满足以下要求而不影响要求。)
  3. 容错(如果其中一台批处理机器关闭,我们希望其他机器负载。)
  4. 任何好的解决方案,已经在类似的情况下工作过?

1 个答案:

答案 0 :(得分:1)

我可以在MongoDB的背景下发言

要求1和2是通过分片完成的。我不确定我是否遵循了你的问题,因为它听起来像1说你不想集中工作量,2是你想要均匀分配工作量。

在任何情况下,使用正确的分片键,您将在分片中分配工作负载。 http://docs.mongodb.org/manual/sharding/

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

我必须更好地了解您的应用程序和用例,但要为100M记录提取10M记录,因为您的典型访问模式听起来不像正确的文档模型。请记住,集合<>表格和文件<>记录。我会考虑以更高的逻辑粒度存储您的10M记录,以便您减少记录;这将显着提高绩效。