通过cronjob将600个图像上传到mysql数据库

时间:2013-06-05 23:38:44

标签: php mysql

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

我无法使用php将这些图像存储在文件系统中 - 甚至需要花费一些时间来保存1张图像,而我所在的共享托管无法应对每5分钟上传和删除600张图像。

所以我想把它们上传到一个单独的数据库,里面只有一个表。

你认为mysql可以解决这个问题吗?

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

4 个答案:

答案 0 :(得分:3)

保存您声称的图像太大,甚至文件系统也无法处理它们,但您希望将它们保存在SQL表中。 SQL将比访问文件系统更慢,更不用说你将在表中从不断更新中创建的所有松弛。在我看来,您可能希望查看具有足够马力的虚拟专用服务器来完成您的任务。共享托管并非适用于所有内容 - 通常它适用于小型,低IO类型的站点或开发更大的站点,这些站点将在以后的许多资源中转移到生产环境中。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

您没有非常清楚地解释这些要求,但我们假设您需要在下个月每5分钟下载600张图片。如果是我,我会调查一个NoSql API(即MongoDB)来直接读取/写入图像到文件系统,并实现排队API(即Gearman)以提供并行能力一次处理多个图像。

基本上它会像这样工作:

  • 您需要的图片卷曲
  • 将图片网址输入队列,作为“有效负载”
  • 指派工作人员处理有效负载。这包括通过NoSQL API下载,调整大小和存储生成的图像

使用这个解决方案,你可以每5分钟一次,如果排队api足够聪明,它将确保没有重复的条目,你不必担心cron没有完成从前一次运行,因为它是唯一的工作是将条目添加到队列中。

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

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

一开始肯定会花费更多的工作,但正如您所看到的,为您提供更长的保质期来处理此类工作。