基本概念和操作
S3系统是构架在Dynamo之上的,它采取的并不是传统的关系数据库存储方式。这么做主要有两个原因:一方面是为了使文件操作尽量简单、高效;另一方面对于—个普通的用户来说最常用的操作是存储和读取数据;传统的关系数据库最擅长的查询在此无用武之地,使用关系数据库只会增加系统的复杂性。S3存储系统中涉及三个基本概念:对象(Object)、键(Key)和桶(Bucket)。
1.对象
对象是S3的基本存储单元,主要由两部分组成:数据和元数据。数据可以是任意类型;元数据是用来描述数据的数据,它一般和具体数据相关联,并不单独存在。S3中元数据存储的是对象数据内容的附加描述信息,这些信息可以是系统默认定义的系统元数据(System Metadata),也可以是自定义的用户元数据(User Metadata),其中用户元数据的大小不得超过2048B。S3系统默认的一些元数据如表3-3所示。

数据是通过一对键-值(Name-Value)集合来定义的。S3中元数据的处理由用户自己完成,系统并不干预。Amazon对于对象存储的内容没有限制,但每个对象最大容量目前被限制在5GB,且在使用UTF-8编码时对象名称不能超过1024B。重命名操作在对象中无效,对象数据的实际存储方式对于用户来说是不透明的,一旦用户对象被创建并添加数据,就无法对数据的某一子部分直接进行修改,间接的修改办法是重新创建对象并向其 中添加新的数据。
2.键
键是对象的唯一标示符。如同每个人都有一个身份证号一样,每个对象必须指定一个键,否则该对象无意义。
3.桶
顾名思义,桶是一个用来存储对象的容器。桶的作用类似于我们的文件夹,对象是存储在桶中的。Amazon目前对于每个用户限制最多创建100个桶,但是并不限制每个桶中对象的数量。桶不可以被嵌套,也就是桶中不能创建桶。桶的名称必须在整个Amazon的S3服务器租用中是全局唯一的,这是因为S3中文件可以被共享,如果桶名不是全局唯一则会出现类似IP冲突的情况,所以桶在命名前最好使用相关命令来査看该名是否已被使用。具体的命名规则如下。
(1)可以包含小写字母、数字、句号(.)、下划线(_)、破折号(-)。
(2)必须以字母或数字开头。
(3)名称长度为3~255个字符。
(4)不能使用类似IP地址的格式(例如,210.45.212.1)。
为了符合域名解析器(DNS)的要求,建议使用以下规则。
(1)名称中不要包含下画线。
(2)名称长度为3~63个字符。
(3)名称不要使用破折号结尾。
(4)两个句号不能在一起使用。
(5)名称中破折号和句号不能一起使用(例如,chinacloud-.com和chinacloud.-com都是不合法的名称)。
建议读者使用符合DNS要求的命名规则,这样一旦需要使用CloudFront等其他 Amazon的云计算服务时就不需要担心名称问题了。当桶和键都己经确定后,对象也就被 唯一确定了。用户可以对比磁盘上文件的查询,当要找的文件所在的文件夹及文件名都确定后,文件自就被找到了。但必须指出的是S3默认并不是普通PC上的那种分层式树状文件存储结构,开发者可以根据需要自己定义。S3中除了以上三个基本部分外,每个对象还有一个访问控制模块,具体内容将在S3安全措施部分进行介绍。S3的基本结构图如3-15所示。

4.基本操作
根据Amazon提供的技术文档,目前S3支持的主要操作包括:Get、Put、List、Delete和Head。表3-4列出了五种操作的主要内容。
