【问题标题】:Uploading 600 images into a mysqldatabase via cronjob通过 cronjob 将 600 张图像上传到 mysql 数据库
【发布时间】:2013-06-05 23:38:44
【问题描述】:

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

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

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

你觉得mysql能应付吗?

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

【问题讨论】:

  • 图片是什么?从哪里?用于什么目的?
  • 来自 xml 提要的图片 - 附属网站 -
  • 我认为在尝试找到解决方案之前,您需要先确定瓶颈在哪里。

标签: php mysql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 请告诉我,上传 600 张图片是一项普通或一项艰巨的任务(我的意思是一般而言)。或者对于专用服务器,它只是在公园里散步?
    • 并非所有的专用服务器都是相同的,有无数种变化,但请确保您可以购买一个可以让这项任务成为“公园散步”的服务器
    【解决方案3】:

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

    【讨论】:

    • EC2 不是存储平台,但 S3 会是一个不错的选择
    • EC2 具有用于存储的 EBS 选项,为此目的使用它们并没有错。事实上,EBS 是由 Amazon 自动存储在 S3 上的。
    • EC2 存储是volititle,是的,EBS 是另一种选择
    • 我正试图了解手头的任务 - 上传 600 张图像 - 从 cronjob 中一个接一个地上传 - 这是一个伟大的主人在公园里散步吗?还是一项艰巨的任务? - 图片不是很大,大多低于 640 x 480 分辨率
    • 对于配置了负载均衡器等的 AWS,一切都在公园里散步 :-)
    【解决方案4】:

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

    基本上它会像这样工作:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 2012-07-23
      • 1970-01-01
      • 2016-05-26
      相关资源
      最近更新 更多