我有一个每5分钟运行一次的cronjob,我需要获取大约600张图片。
我无法使用php将这些图像存储在文件系统中 - 甚至需要花费一些时间来保存1张图像,而我所在的共享托管无法应对每5分钟上传和删除600张图像。
所以我想把它们上传到一个单独的数据库,里面只有一个表。
你认为mysql可以解决这个问题吗?
关于如何做到这一点的更好的想法?
泰
答案 0 :(得分:3)
保存您声称的图像太大,甚至文件系统也无法处理它们,但您希望将它们保存在SQL表中。 SQL将比访问文件系统更慢,更不用说你将在表中从不断更新中创建的所有松弛。在我看来,您可能希望查看具有足够马力的虚拟专用服务器来完成您的任务。共享托管并非适用于所有内容 - 通常它适用于小型,低IO类型的站点或开发更大的站点,这些站点将在以后的许多资源中转移到生产环境中。
答案 1 :(得分:2)
我不建议将图像加载到数据库中。读取速度不会那么快,并且需要太多资源才能运行。为什么不将图像加载到Amazon EC2 / S3数据存储等外部Web存储服务中?
答案 2 :(得分:2)
如果文件系统无法处理它,同一主机上的mysql服务器肯定无法处理它(毕竟,它访问同一个文件系统)。如果数据库在不同的主机上运行,则由于网络流量而产生额外的开销,并且网络连接甚至不太可能处理它。
答案 3 :(得分:0)
您没有非常清楚地解释这些要求,但我们假设您需要在下个月每5分钟下载600张图片。如果是我,我会调查一个NoSql API(即MongoDB)来直接读取/写入图像到文件系统,并实现排队API(即Gearman)以提供并行能力一次处理多个图像。
基本上它会像这样工作:
使用这个解决方案,你可以每5分钟一次,如果排队api足够聪明,它将确保没有重复的条目,你不必担心cron没有完成从前一次运行,因为它是唯一的工作是将条目添加到队列中。
此外,您可以根据硬件设置增加工作人员数量,因此如果您没有太多ram或cpu,请将工作线程限制设置为2,并且当您向上/向外扩展时,可以增加工作人员因此限制。
另一个考虑因素是,如果要从httpd服务之外的其他服务器访问图像,您需要考虑像NFS这样的网络文件系统,或GlusterFS。
一开始肯定会花费更多的工作,但正如您所看到的,为您提供更长的保质期来处理此类工作。