0

我有一个每 5 分钟运行一次的 cronjob,我需要获取大约 600 张图像。

我无法使用 php 将这些图像存储在文件系统中 - 甚至需要花费大量时间来保存 1 张图像,而且我所在的共享主机无法处理每 5 分钟上传和删除 600 张图像的问题。

所以我正在考虑将它们上传到一个单独的数据库,里面只有一个表。

你认为mysql能应付这个吗?

关于如何做到这一点的任何更好的想法?

4

4 回答 4

3

保存您声称的图像太大以至于文件系统无法处理它们,但您希望将它们保存在 SQL 表中。SQL 将比访问文件系统还要慢,更不用说您将通过不断更新在表中创建的所有松弛。在我看来,您可能想要研究具有足够马力来完成您的任务的虚拟专用服务器。共享主机并不适用于一切——通常它适用于小型、低 IO 类型的站点或大型站点的开发,这些站点将在以后移动到具有更多资源的生产环境中。

于 2013-06-05T23:43:27.763 回答
2

我不建议将图像加载到数据库中。读取速度不会那么快,并且需要太多资源才能运行。为什么不将图像加载到 Amazon EC2 / S3 数据存储等外部 Web 存储服务中?

于 2013-06-05T23:42:37.970 回答
2

如果文件系统无法处理它,同一主机上的 mysql 服务器肯定无法处理它(毕竟,它访问的是同一个文件系统)。如果数据库在不同的主机上运行,​​由于网络流量,您会有额外的开销,并且网络连接处理它的可能性更小。

于 2013-06-05T23:43:02.680 回答
0

您没有很清楚地解释要求,但假设您需要在下个月每 5 分钟下载 600 张图像。如果是我,我会研究 NoSql API(即MongoDB)用于直接将图像读/写到文件系统,并实现一个排队 API(即Gearman)以提供一次并行处理多个图像的能力。

基本上它会像这样工作:

  • 卷曲您需要的图像
  • 将图像 url 作为“有效负载”输入队列
  • 分配一个工作人员来处理有效负载。这将包括通过 NoSQL API 下载、调整大小和存储结果图像

使用此解决方案,您可以每 5 分钟 cron 一次,如果排队 api 足够智能,它将确保没有重复的条目,并且您不必担心 cron 没有从上一次运行中完成,因为它唯一的工作就是添加进入队列。

此外,您可以根据您的硬件设置增加工作人员的数量,因此如果您没有太多的 ram 或 cpu,请将工作人员限制设置为 2,并且当您扩大/扩大时,您可以相应地增加工作人员限制。

另一个考虑因素是,如果要从 httpd 服务之外的其他服务器访问图像,您将需要考虑网络文件系统,如 NFS 或GlusterFS

一开始肯定需要更多的工作,但正如您所见,为您处理此类工作提供了更长的保质期。

于 2013-06-06T00:01:29.047 回答