MongoDB相关的扩展问题



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

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

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

我想做的是,

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

有什么好的解决方案,在类似的情况下已经奏效了吗?

我可以在MongoDB 的上下文中发言

需求1和2是通过分片完成的。我不确定我是否理解你的问题,因为听起来1是说你不想集中工作负载,2是说你想平均分配工作负载。

在任何情况下,使用适当的shard密钥,您都可以将工作负载分布在您的shard上。http://docs.mongodb.org/manual/sharding/

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

我必须更多地了解您的应用程序和用例才能确定,但将10M记录转换为100M记录作为典型的访问模式听起来并不是合适的文档模型。请记住该系列<>表格和文档<>记录我会考虑以更高的逻辑粒度存储您的10M记录,这样您就可以提取更少的记录;这将显著提高性能。

相关内容

  • 没有找到相关文章

最新更新