处理数百万份文件的提示?

时间:2013-12-02 20:52:55

标签: php node.js mongodb

我在分片群集的mongodb中记录了8台机器的许多信息。它每天在3个系列中成长约50万份文件。这是1gb /天。

我的结构是:

  • 1 VPS 512mb RAM ubuntu // shardsrvr,configsrvr和router
  • 1 VPS 512mb RAM ubuntu // shardsrvr,configsrvr
  • 1 VPS 8gb RAM ubuntu // shardsrvr,configsrvr //所有收藏的主要内容

现在没有一个集合已启用分片,没有人拥有副本集。我刚刚安装了集群。

所以现在我需要在所有这些文档和集合中运行查询以获得不同的统计信息。这意味着很多人,很重要...... 我做的第一个测试是使用PHP将所有文档循环到一个集合中并打印ID。这崩溃了主要的shardserver。 然后我尝试了一些其他测试,限制5k文档的查询,它的工作原理......

我的问题是关于处理这种结构的更好方法。

  • 为集合启用分片?
  • 创建副本集?
  • php能够做到这一点吗?也许使用nodejs更好?

1 个答案:

答案 0 :(得分:1)

解决方案可能取决于您希望长期实现的目标以及您尝试执行的操作类型。

副本集只会帮助您提供冗余和数据可用性。如果您计划让数据继续长期增长,您可能需要将其视为灾难恢复解决方案。

另一方面,分片将为您提供水平缩放,并应提高查询速度。由于查询崩溃了您的主分片服务器,我猜测它试图处理的数据太大而无法自行处理。在这种情况下,听起来像正在使用的集合分片会有所帮助,因为它会将工作负载分散到多个服务器上。您还应该考虑索引是否有助于提高查询效率。

但是,您应该考虑使用当前设置进行分片会引入更多可能的故障点;如果任何一个磁盘损坏,那么整个数据集将被删除。

最后,可能归结为谁在做繁重的工作,PHP或Mongo?

如果您只是在进行计数并返回大量文档供PHP处理,您可以通过为查询创建适当的索引来处理性能问题。