2014-02-20 19 views
2

我正在使用AWS S3作为我的Java应用程序的映像服务器。在任何时候,我们都可以托管超过一百万张图片,所以我的问题就是存储图片。将AWS S3配置为映像服务器

  1. 我是我当前的应用程序,我将它们存储在嵌套目录

    domain.com/63/45/1d/d435.jpg 
    

    所以我应该继续存储在这样的目录中的图片?或者将它们存储在根文件夹中会更好吗?我不确定AWS如何扩展它的S3实例,所以我想确保我做的是正确的。

  2. 什么是水桶?是我的S3实例中的存储实例吗?

  3. 传递到PutObjectRequest的关键是什么?我不确定这是否如何提供目录,假设凭据传递到AmazonS3Client。

  4. 从s3实例读取时,最好是指向记录(如images.domain.com)到我的S3实例并直接拖动图像?如果是这样,你需要将S3实例配置为静态虚拟主机吗?

回答

3
  1. 除非你要超过每秒50至100个图像的连续上传到S3,it doesn't really matter。 S3不会将文件存储在“文件夹”中,但在浏览控制台时确实使用斜杠来提供“文件夹”的视觉效果,并且可以在以编程方式提取对象列表时使用斜杠作为前缀分隔符。无论是将所有文件存储在根中还是将它们在路径中用斜杠分开,都没有任何性能优势。文件命名的唯一潜在影响是当您以极高的速度上传文件时,文件名的前几个字节全部相同...... S3 cam可以节制您。但是你不太可能会遇到这种情况。如果这样做,请退出并自动重试,或分割工作负载,以免在如此短的时间窗口内上载连续命名的文件。

  2. S3不使用术语“实例”。或者“文件”。 “文件”被称为“对象”,“对象”存储在“桶”中,每一个都有一个“键”(完整路径+文件名)“images.example.com”可能是你称之为图像桶“63/45/1d/d435.jpg”将成为通过images.example.com/63/45/1d/d435.jpg访问的文件的关键。

  3. “键”是“对象”的“文件名”。没有实际的目录,每个对象都由它的“key”标识 - 它看起来像/path/to/file/and/filename.ext ...这意味着你不必做任何事情来“创建”那些目录。它们奇迹般地出现,因为有这些前缀的文件,并且当(如果)删除文件时会消失。

  4. 没有S3“实例”是你的。当你使用S3时,你没有得到“虚拟机”,你的请求是由S3这个庞大的,可扩展的,分布式的实体服务的,而且它是一个比你想象的更具可扩展性的系统,考虑到它服务于每秒每秒超过一百万个请求,每一天,每一天。如静态网站托管配置存储桶,并将CNAME指向存储区的网站端点(如控制台中显示的那样),或者如果您为DNS使用Route 53,则使用别名记录。