【问题标题】:Moving 1 million image files to Amazon S3将 100 万个图像文件移动到 Amazon S3
【发布时间】:2011-01-17 11:18:27
【问题描述】:

我经营一个拥有超过 100 万张图片 (~150GB) 的图片分享网站。我目前将这些存储在专用服务器的硬盘驱动器上,但空间很快就会用完,因此我想将它们移动到 Amazon S3。

我尝试过执行 RSYNC,但 RSYNC 花了一天多的时间来扫描和创建图像文件列表。又过了一天的传输,只完成了 7% 并且让我的服务器慢了下来,所以我不得不取消。

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

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

【问题讨论】:

  • 这与编程无关。
  • 你可以在晚上服务器不忙的时候运行它。还有一个“不错的”工具可以减少你的缓慢问题。由于 rsync 可以配置为跳过重复项,因此速度最终会提高。我肯定会将图像拆分为子目录,因为一旦您获得超过 100,000 个文件,许多 Linux 命令就会开始失败。另一个问题,如果你有太多文件,你可能会用完 inode。

标签: amazon-s3 rsync


【解决方案1】:

一种选择可能是以惰性方式执行迁移。

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

这应该会很快将所有最近或通常获取的图像转移到亚马逊,从而减少服务器上的负载。然后,您可以添加另一个任务,只要服务器最不忙,就会慢慢迁移其他任务。

【讨论】:

  • 我最近正好采用了这种方法,当时我需要将 4000 万张图像迁移到 S3。我已将我使用的代码放在 Github 上,希望其他人觉得这很有用:github.com/mikery/s3cacher
  • 我也赞成这个想法。优雅。
【解决方案2】:
  1. 鉴于文件在 S3 上(尚不存在),将它们作为存档文件发送应该比使用同步协议更快。

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

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

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

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

【讨论】:

  • 将1m个文件分成1000个子目录合理吗?没有理由拥有超过 1 级的文件吗?
  • 是的。有多种方法可以做到这一点,具体取决于它们的命名和组织方式、您希望如何管理它们等。
  • 如果我要拆分文件,gzip 似乎没有意义。我可能只是遍历数据库中的每个项目,获取文件名,将文件复制到 S3 ,将其文件名更改为它的 mysql 自动增量 ID。然后我可以根据它们的 ID 拆分文件(另外我将不再需要在 db 中有一个文件名列)。即使需要一个月的时间,我至少可以每天做一些工作,开始从 S3 读取 S3 上的文件,并删除服务器上的旧文件以节省空间。这似乎合理?
  • S3 没有“文件夹”的缩放问题 - 因为它没有文件夹。每个文件都有一个键(通常应该看起来像一个路径)images/892849845.png
  • 带密钥的 S3 文件系统的一个优点是它是一个“无限分叉”文件系统。假设您想将所有数据存储在 S3 中,包括每个图像的标签、图像名称、地理位置等。然后您可以存储一些东西,例如 images/8248478798.png/tags.json 和 images/8248478798.png/info。 json 等真的很酷。
【解决方案3】:

除了通过网络传输文件之外,您还可以使用一个选项将它们放在硬盘上,然后将其发送到亚马逊的import/export 服务。您不必担心服务器的网络连接饱和等问题。

【讨论】:

  • 很遗憾,这不是一个选项,因为我无法轻松访问数据中心来执行此类操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2015-09-01
  • 1970-01-01
  • 2014-10-24
  • 2016-03-27
  • 2010-11-17
相关资源
最近更新 更多