Php 计算90000的MD5+;文件并存储到数据库

Php 计算90000的MD5+;文件并存储到数据库,php,multithreading,md5,Php,Multithreading,Md5,我正在编写一个脚本,该脚本下载我的所有图像,计算MD5散列,然后将该散列存储在数据库的新列中。我有一个脚本,可以从数据库中选择图像并将其保存在本地。图像的唯一id将成为文件名 我的问题是,虽然可以快速下载许多文件,但在回调中计算每个文件的MD5哈希值会减慢下载速度。那是我第一次尝试。在下一次尝试中,我想将代码的下载部分和散列部分分开。最好的方法是什么?我更喜欢使用PHP,因为这是我最熟悉的,也是我们的服务器运行的,但是PHP的线程支持至少是缺乏的 想法是有一个建立SQLite连接的父进程,然后产

我正在编写一个脚本,该脚本下载我的所有图像,计算MD5散列,然后将该散列存储在数据库的新列中。我有一个脚本,可以从数据库中选择图像并将其保存在本地。图像的唯一id将成为文件名

我的问题是,虽然可以快速下载许多文件,但在回调中计算每个文件的MD5哈希值会减慢下载速度。那是我第一次尝试。在下一次尝试中,我想将代码的下载部分和散列部分分开。最好的方法是什么?我更喜欢使用PHP,因为这是我最熟悉的,也是我们的服务器运行的,但是PHP的线程支持至少是缺乏的


想法是有一个建立SQLite连接的父进程,然后产生许多子进程,这些子进程选择一个图像,计算其哈希值,将其存储在数据库中,然后删除该图像。我走的是正确的道路吗?

有很多方法可以实现这一点,但您选择哪种方法实际上取决于项目的具体情况

一种简单的方法是使用一个PHP下载图像,然后将它们放在文件系统中,并向队列数据库添加一个条目。然后,第二个PHP程序将读取队列,并处理等待的队列

对于第二个PHP程序,您可以设置一个cron作业来定期检查并处理所有等待的内容。第二种方法是每次下载完成后在后台生成PHP程序。第二种方法更为优化,但有点复杂。查看下面的帖子,了解如何在后台运行PHP脚本


有很多方法可以实现这一点,但您选择哪种方法实际上取决于项目的具体情况

一种简单的方法是使用一个PHP下载图像,然后将它们放在文件系统中,并向队列数据库添加一个条目。然后,第二个PHP程序将读取队列,并处理等待的队列

对于第二个PHP程序,您可以设置一个cron作业来定期检查并处理所有等待的内容。第二种方法是每次下载完成后在后台生成PHP程序。第二种方法更为优化,但有点复杂。查看下面的帖子,了解如何在后台运行PHP脚本


我在工作中也讨论过类似的问题,但它需要一个类似amqp的服务器

假设有3个php脚本:

  • 第一:将URL添加到队列中
  • 第二:从队列中获取url,下载文件并将下载的文件名添加到队列中
  • 第三:获取队列的文件名,并将md5设置到数据库中
我们使用这种方式来处理使用python脚本的多个图像下载/处理(php并不远)

您可以查看一些php库和一些基本示例


通过这种方式,我们可以根据每个队列长度来扩展每个工作者。因此,如果要下载大量URL,只需启动另一个脚本#2,如果有大量未处理的文件,只需启动一个新脚本#3,依此类推。

我在工作中也讨论了类似的问题,但它需要类似的amqp服务器

假设有3个php脚本:

  • 第一:将URL添加到队列中
  • 第二:从队列中获取url,下载文件并将下载的文件名添加到队列中
  • 第三:获取队列的文件名,并将md5设置到数据库中
我们使用这种方式来处理使用python脚本的多个图像下载/处理(php并不远)

您可以查看一些php库和一些基本示例


通过这种方式,我们可以根据每个队列长度来扩展每个工作者。因此,如果要下载大量URL,只需启动另一个脚本#2,如果有大量未处理的文件,只需启动一个新脚本#3等等。

保存文件,在循环中调用md5_file()-最近看到几乎相同的问题…保存文件,调用md5_file()在一个循环中,latterSee几乎看到了相同的问题…最终以不同的方式解决了问题,但这是一个很好的答案。最终以不同的方式解决了问题,但这是一个很好的答案。