我遇到了一个简单的效率问题。
我创建了一个PHP代码,可以将我文件夹中的所有文件上传到Amazon S3上的存储桶。我的代码也可以在不丢失其结构的情况下上传子文件中的文件。
基本上,用户必须登录我的网站,然后根据用户的帐户名称,他们可以将照片上传到Amazon s3上的我的存储桶。用户最多可以上传10张照片 - 然后将这些照片修改为子文件类型,例如修改和缩略图。
我应该如何上传我的目录结构才能在Amazon S3上高效?
选项1(同一个文件夹中的文件但文件夹不同 - 更有条理)
username/originalfiles/picture01.jpg
username/original/picture02.jpg
username/original/picture03.jpg
....
username/original/picture10.jpg
username/modifiedpicture01.jpg
username/modified/picture02.jpg
username/modified/picture03.jpg
....
username/modified/picture10.jpg
username/thumbailspicture01.jpg
username/thumbails/picture02.jpg
username/thumbails/picture03.jpg
....
username/thumbails/picture10.jpg
或者
选项2(同一个存储桶中的所有文件)
username-original-picture01.jpg
username-original-picture02.jpg
username-original-picture03.jpg
....
username-original-picture10.jpg
username-modifiedpicture01.jpg
username-modified-picture02.jpg
username-modified-picture03.jpg
....
username-modified-picture10.jpg
username-thumbailspicture01.jpg
username-thumbails-picture02.jpg
username-thumbails-picture03.jpg
....
username-thumbails-picture10.jpg
或者它在Amazon S3中没有任何不同?
答案 0 :(得分:19)
它对于组织目的没有任何影响,S3文件夹实际上只是为了像我们这样的人类的利益的幻觉,所以它似乎很熟悉 - 在你自己的机器上确实没有物理上独立的文件夹。 / p>
您使用的命名约定会对性能产生巨大影响,一旦达到某一点(对于少量文件,它可能不会引人注意)。
通常,您希望文件/文件夹名称的开头部分为“random-ish”,越随机越好......这样s3可以更好地分散工作负载。如果名称前缀完全相同,则会存在潜在的瓶颈。每个文件名开头的短随机哈希可能会给你最好的表现。
马匹(AWS)口:
密钥名称中的序列模式引入了性能问题。要了解这个问题,我们来看看Amazon S3的存储方式 关键名称。
Amazon S3维护每个AWS区域中的对象键名称索引。 对象键以字典顺序存储在多个分区中 指数。也就是说,Amazon S3按字母顺序存储键名。 密钥名称指示密钥存储在哪个分区。使用 顺序前缀,例如时间戳或字母顺序, 增加了Amazon S3针对特定目标的可能性 分区大量的密钥,压倒了I / O. 分区的容量。如果你在你的中引入一些随机性 密钥名称前缀,密钥名称,以及I / O负载,将是 分布在多个分区上。
如果您预计您的工作量将持续超过100 每秒请求,您应该避免顺序键名称。如果你 必须使用密钥名称中的序号或日期和时间模式, 为密钥名称添加随机前缀。前缀的随机性更多 在多个索引分区之间均匀分配密钥名称。 本主题后面将提供引入随机性的示例。
http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html
答案 1 :(得分:1)
在Amazon S3中没有任何不同。只有对象键。