Amazon Simple Storage Service(S3)

Posted sp42a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Amazon Simple Storage Service(S3)相关的知识,希望对你有一定的参考价值。

这2天接触了一下 Amazon Web Services(AWS) 中的 Amazon Simple Storage Service,简称 Amazon S3(下称 S3)。S3 站点上用下面的语句描述了自己的作用:

Amazon S3 provides a simple web services interface that can be used to store and retrieve any amount of data, at any time, from anywhere on the web. It gives any developer access to the same highly scalable, reliable, fast, inexpensive data storage infrastructure that Amazon uses to run its own global network of web sites. The service aims to maximize benefits of scale and to pass those benefits on to developers.

通过S3这个接口,您可以把 Amazon 的存储服务当作一个硬盘,可以随时随地上传,下载数据,不过您得付钱才可以使用,即使您只是准备测试一下。S3 首页上有价格表。在 S3 注册并付费获取2个数:Access Key ID 和 Secret Access Key,才可以使用 S3 的服务,因为所有的操作都需要这2个数进行身份验证。

基本概念:Buckets,Objects,Keys,Operations

注册后,用户通过名为 bucket 的容器来管理所有数据,这些数据称之为对象(Object)。比如,一个名为 20071211/logo-320x240.gif 的对象存放在 livebaby 这个bucket 里,则可以通过URL:http: //s3.amazonaws.com/livebaby/20071211/logo-320x240.gif 来访问这个对象。bucket 有3个基本概念:1、不能删除非空的 bucket;2、bucket 不能转让给其他用户;3、每个用户最多只能有100个 buckets。简单的说,bucket 类似硬盘分区中的第一层目录。

这里还有一个 key 的概念,key 是 bucket 中对象的唯一标识符,每个对象对应一个 key。上例中,20071211/logo-320x240.gif 称为key。

每个对象都有一组键值对,称为 MetaData,分2种,系统 metadata 和用户 metadata。S3 不处理用户 metadata,只接收、存储、返回给用户,由用户自己处理。REST 下,系统 metadata 以 x-amz- 开头,用户 metadata 以 x-amz-meta- 开头。

Amazon 提供2种 API:Simple Object Access Protocol(SOAP) 和 Representational State Transfer(REST) 来访问 AWS。这里一篇文章,其中简单对比了一下2者的区别,区别后总结说:“

In fact, you can think of REST as a kind of data-access methodology whereas SOAP is a process-control methodology.

通过 SOAP 和 REST,最常用的操作(Operation)有这么几个:

  • 创建 bucket;
  • 上传对象,上传时必须指定一个 key,同时还可以设置这个对象的访问控制权限,默认是私有的;
  • 下载对象,有 HTTP 和 BitTorrent 2 种方式;
  • 删除对象;
  • 列表对象;列表时,可以通过一个前缀(prefix)来过滤显示不同的对象。

通过向 AWS 的服务端点 (endpoint,http://s3.amazonaws.com/) 发出 PUT、GET、DELETE、HEAD 等 HTTP Requests,便可以操作 S3 上的数据。

如果通过 web 访问 S3 服务来获取数据(Object),则分页、搜索等功能是比不可少的。而S3提供的4个参数,可以让我们方便快捷的将数据取出来,这4个参数是基于 key 操作的。key 的概念参见文章一。

1、prefix。比如 http://bucket.s3.amazonaws.com/?prefix=123,则将 ke y中以123开头的列出来。

2、delimiter。比如 http://bucket.s3.amazonaws.com/?delimiter=/,此时,S3 可能会返回 CommonPrefixes,将 key 中采用“/”分隔的列出来。

<Contents>
	<Key>123/zzz.txt</Key>
	<LastModified>2007-12-11T07:41:51.000Z</LastModified>
	<ETag>"d725dfc2167445d1db23067de33ebd28"</ETag>
	<Size>203</Size>
	<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
	<Key>abc/ooo/yxx.txt</Key>
	<LastModified>2007-12-12T05:34:35.000Z</LastModified>
	<ETag>"4fdf8a4dd42bd4d24855eebd5c9b9434"</ETag>
	<Size>41</Size>
	<StorageClass>STANDARD</StorageClass>
</Contents>

用了“delimiter=/”返回,告诉你 有 prefix 为 123/abc/ 可用。

<CommonPrefixes>
<Prefix>123/</Prefix>
</CommonPrefixes>
<CommonPrefixes>
<Prefix>abc/</Prefix>
</CommonPrefixes>

这时输入 http://bucket.s3.amazonaws.com/?delimiter=/&prefix=123/ 则将 prefix 中有 123/ 的全部列出来。

如果 key 有这样的形式:ms_vb_5_src/sss.frmms_vb_6_src/ddd.frm,你可以把 delimiter 设为“_”来取数据。通过不同的 delimiter 和 prefix 可以非常灵活的获取数据。如果数据量很大,则可以用第三个和第四个参数

3、MaxKeys。这个告诉 S3 一次性返回多少数据,默认返回1000个。URL输入 http://bucket.s3.amazonaws.com/?delimiter=/&prefix=123/&max-keys=10,则返回:

<Name>bucket</Name>
<Prefix>123/</Prefix>
<Marker />
<NextMarker>123/10.txt</NextMarker>
<MaxKeys>10</MaxKeys>
<Delimiter>/</Delimiter>
<IsTruncated>true</IsTruncated>
<Contents>
	<Key>123/1.txt</Key>
	<LastModified>2007-12-12T06:02:33.000Z</LastModified>
	<ETag>"9dd4e461268c8034f5c8564e155c67a6"</ETag>
	<Size>1</Size>
	<StorageClass>STANDARD</StorageClass>
</Contents>

里面 IsTruncated 为 true,表示按照 delimiter 和 prefix 和 max-keys 取出的数据不止10个;余下的数据怎么取?就用到了 NextMarker 元素中数据。

4、Marker。 URL 输入http://bucket.s3.amazonaws.com/?delimiter=/&prefix=123/&max -keys=10&marker=123/10.txt,marke r的值就是 NextMarker 元素中数据。这样 S3 就返回了下10条数据。

<Name>bucket</Name>
<Prefix>123/</Prefix>
<Marker>123/10.txt</Marker>
<NextMarker>123/19.txt</NextMarker>
<MaxKeys>10</MaxKeys>
<Delimiter>/</Delimiter>
<IsTruncated>true</IsTruncated>
<Contents>
	<Key>123/1.txt</Key>
	<LastModified>2007-12-12T06:02:33.000Z</LastModified>
	<ETag>"9dd4e461268c8034f5c8564e155c67a6"</ETag>
	<Size>1</Size>
	<StorageClass>STANDARD</StorageClass>
</Contents>

如果 IsTruncated 仍为 true,则表示还有数据,我们把 marker 改为 marker=123/19.txt 便可以继续取下10条数据;如果 IsTruncated为 false,则表示按照条件已经将数据全部取出来了。

S3 文档中,提供更为详细的解释。点击查看:http://docs.amazonwebservices.com/AmazonS3/2006-03-01/

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于Amazon Simple Storage Service(S3)的主要内容,如果未能解决你的问题,请参考以下文章

错误 CS0030:无法在 Amazon Web Service 中将类型“Simple.Amazon.ECS.ImageSet[]”转换为“Simple.Amazon.ECS.ImageSet”

Python 包装器“python-amazon-simple-product-api”用于在亚马逊上创建新购物车

如何在 Amazon Elastic Mapreduce 之上使用 Hive 来处理 Amazon Simple DB 中的数据?

Amazon Simple Notification Service 是 RESTFUL Web 服务吗?

将 Paperclip 数据库迁移到 Active Storage Amazon S3

Amazon Simple Email Service 的邮箱模拟器