将100万个图像文件移动到Amazon S3

mak*_*eee 8 rsync amazon-s3

我运行的图像共享网站有超过100万张图像(~150GB).我目前将这些存储在我的专用服务器的硬盘驱动器上,但是我很快耗尽了空间,所以我想将它们移到Amazon S3.

我已经尝试过做一个RSYNC,它花了一天的时间来扫描和创建图像文件列表.转移一天后,它只完成了7%,并使我的服务器速度变慢,所以我不得不取消.

有没有更好的方法来执行此操作,例如将它们GZIP到另一个本地硬盘驱动器然后传输/解压缩该单个文件?

我也想知道将这些文件存储在多个子目录中是否有意义,或者将所有百万+文件放在同一目录中是否合适?

Ian*_*cer 25

一种选择可能是以懒惰的方式执行迁移.

  • 所有新图像都会转到Amazon S3.
  • 对尚未在亚马逊上映像的任何请求都会触发将该映像迁移到Amazon S3.(排队)

这应该可以非常快速地将所有最近或常被提取的图像移到亚马逊上,从而减少服务器上的负载.然后,您可以添加另一个任务,以便在服务器最不忙时缓慢迁移其他任务.

  • 我最近采用了这种方法,当时我需要将4000万张图像迁移到S3.我把我用过的代码放在Github上,希望其他人觉得这很有用:https://github.com/mikery/s3cacher (2认同)

Ste*_*n C 5

  1. 鉴于S3上尚不存在文件,将它们作为存档文件发送应该比使用同步协议更快.

  2. 但是,压缩存档对图像文件没有多大帮助(如果有的话),假设图像文件已经以压缩格式(如JPEG)存储.

  3. 传输~150GB的数据将长时间消耗大量的网络带宽.如果您尝试使用HTTP或FTP而不是RSYNC进行传输,这将是相同的.如果可能,离线转移会更好; 例如,发送硬盘,或一组磁带或DVD.

  4. 从性能角度来看,将一百万个文件放在一个平面目录中是个坏主意.虽然一些文件系统可以很好地处理O(logN)文件名查找时间,但其他文件系统不会使用O(N)文件名查找.乘以该数N来访问目录中的所有文件.另一个问题是需要按文件名顺序访问文件的实用程序如果需要对一百万个文件名进行排序,则可能会显着减慢速度.(这可能部分解释了为什么rsync花了1天时间进行索引.)

  5. 从管理角度来看,将所有图像文件放在一个目录中是一个坏主意; 例如,用于备份,存档,移动内容,扩展到多个光盘或文件系统等.