我运行的图像共享网站有超过100万张图像(~150GB)。我目前将这些存储在我的专用服务器的硬盘驱动器上,但我很快耗尽了空间,所以我想将它们移到Amazon S3。
我尝试过做一个RSYNC,一天只花了RSYNC来扫描和创建图像文件列表。转移一天后,它只完成了7%,并且我的服务器速度变慢了,所以我不得不取消。
有没有更好的方法来执行此操作,例如将它们GZIP到另一个本地硬盘驱动器然后传输/解压缩该单个文件?
我也想知道将这些文件存储在多个子目录中是否有意义,或者将所有百万+文件放在同一目录中是否合适?
答案 0 :(得分:25)
一种选择可能是以懒惰的方式执行迁移。
这应该可以非常快速地将所有最近或常被提取的图像移到亚马逊上,从而减少服务器的负担。然后,您可以添加另一个任务,以便在服务器最不忙时缓慢迁移其他任务。
答案 1 :(得分:5)
鉴于S3上尚未存在文件,将它们作为存档文件发送应该比使用同步协议更快。
但是,压缩存档对图像文件没有多大帮助(如果有的话),假设图像文件已经以JPEG等压缩格式存储。
传输约150 GB的数据会长时间消耗大量的网络带宽。如果您尝试使用HTTP或FTP而不是RSYNC进行传输,这将是相同的。如果可能,离线转移会更好;例如发送硬盘,或一组磁带或DVD。
从性能角度来看,将一百万个文件放入一个平面目录中是个坏主意。虽然有些文件系统可以很好地处理O(logN)
文件名查找时间,但其他文件系统不会使用O(N)
文件名查找。乘以N
来访问目录中的所有文件。另一个问题是需要按文件名顺序访问文件的实用程序如果需要对一百万个文件名进行排序,可能会显着减慢速度。 (这可能部分解释了为什么rsync
花了1天的时间来进行索引。)
从管理角度来看,将所有图像文件放在一个目录中是一个坏主意;例如用于备份,存档,移动内容,扩展到多个光盘或文件系统等。
答案 2 :(得分:4)
您可以使用的一个选项是将它们放在硬盘上并将其运送到亚马逊的import/export服务中,而不是通过网络传输文件。您不必担心服务器的网络连接等饱和。