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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值