将AWS S3配置为映像服务器

时间:2014-02-20 02:44:16

标签: java amazon-web-services amazon-s3

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

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

    实施例

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

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

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

  3. 传递给PutObjectRequest的密钥是什么?我不确定这是否是您提供目录的方式,假设凭据传递到AmazonS3Client。

  4. 从s3实例中读取时,最好是将cname记录(例如images.domain.com)指向我的S3实例并直接提取图像吗?如果是这样,您是否需要将S3实例配置为静态Web托管?

1 个答案:

答案 0 :(得分: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”是“object”的“文件名”。没有实际的目录,每个对象都由它的“密钥”标识 - 它看起来像/path/to/file/and/filename.ext ...这意味着你不需要做任何事情来“创建”那些目录。它们神奇地出现,因为有些文件带有这些前缀,并在删除文件时消失。

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