php - 处理数百万文档的技巧?

标签 php node.js mongodb

我在分片集群 mongodb 中记录了 8 台机器的许多信息。它每天在 3 个集合中增加大约 50 万份文档。这是 1gb/天。

我的结构是:

  • 1 VPS 512mb RAM ubuntu//shardsrvr、configsrvr 和路由器
  • 1 VPS 512mb RAM ubuntu//shardsrvr, configsrvr
  • 1 VPS 8gb RAM ubuntu//shardsrvr, configsrvr//所有集合的主要

目前没有一个集合启用了分片,也没有一个有副本集。我刚刚安装了集群。

所以现在我需要在所有这些文档和集合中运行查询以获得不同的统计信息。这意味着很多地方,计数等...... 我做的第一个测试是用 PHP 循环一个集合中的所有文档并打印 ID。这导致主分片服务器崩溃。 然后我尝试了一些其他测试来限制 5k 文档的查询并且它有效......

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

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

最佳答案

解决方案可能取决于您希望长期完成的任务以及您尝试执行的操作类型。

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

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

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

最后,可能要看谁在做繁重的工作,是 PHP 还是 Mongo?

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

关于php - 处理数百万文档的技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20337593/

相关文章:

php - 根据页面隐藏侧边栏上的内容

algorithm - 如何积累异步数据?

php - Uglify-JS 不会使用 shell_exec() 运行

mongodb - Calipso安装权限问题

javascript - .when 可以用 Angular $routeProvider 动态生成吗?

Mongodb 查询用于计算所有文档中的不同值

php - 特定 MySQL 日期查询情况的最佳实践

php - 在php上显示数据

php - Zend_Paginator 让用户选择每页的行数

node.js - Cassandra Node.js ORM 最佳实践