仅供参考,这个问题并不完全基于MongoDB,但碰巧使用的是MongoDB。我假设我们可能最终使用MongoDB的功能,例如在一个好的设计中进行分片,因此提到了MongoDB。另外fwiw,我们使用Java。
因此我们在某个集合中有大约1亿条记录,其中我们需要选择明天有一些数据集的所有项目。通常此查询返回1000万条记录。
你可以认为我们手上有N台机器。我们可以假设,MongoDB基于record_id进行分片。 我们将处理的每条记录都与我们正在阅读的其他记录无关。作为此批处理作业的一部分,不会写入任何记录。
我期待的是,
任何好的解决方案,已经在类似的情况下工作过?
答案 0 :(得分:1)
我可以在MongoDB的背景下发言
要求1和2是通过分片完成的。我不确定我是否遵循了你的问题,因为它听起来像1说你不想集中工作量,2是你想要均匀分配工作量。
在任何情况下,使用正确的分片键,您将在分片中分配工作负载。 http://docs.mongodb.org/manual/sharding/
要求3通过MongoDB中的副本集执行。 http://docs.mongodb.org/manual/replication/
我必须更好地了解您的应用程序和用例,但要为100M记录提取10M记录,因为您的典型访问模式听起来不像正确的文档模型。请记住,集合<>表格和文件<>记录。我会考虑以更高的逻辑粒度存储您的10M记录,以便您减少记录;这将显着提高绩效。