关键词

为了有效使用 Cloud Storage,您应了解它的一些基础概念。本页面概述了适用于 Cloud Storage 的关键术语和概念。

如需了解如何使用 Cloud Storage,请参阅什么是 Cloud Storage?

项目

Cloud Storage 中的所有数据都属于项目内容。项目包含一组用户和一组 API,以及这些 API 的结算、身份验证和监控设置。您可以拥有一个或多个项目。

存储分区

存储分区是用于存放数据的基本容器。您在 Cloud Storage 中存储的所有内容都必须包含在存储分区中。您可以使用存储分区来整理数据并控制数据的访问权限,但与目录和文件夹不同,您无法嵌套存储分区。由于存储分区的创建和删除存在限制,您设计的存储应用应支持大量对象操作和相对较少的存储分区操作。

创建存储分区时,您需指定全局唯一名称、存放存储分区及其内容的地理位置以及默认的存储类别。您选择的默认存储类别会应用于已添加到存储分区中、但没有明确指定存储类别的对象。

创建存储分区后,您仍可将其默认存储类别更改为存储分区所在位置支持的任何类别;但是,您只能通过删除并重新创建存储分区来更改存储分区的名称和位置。

存储分区名称

存储分区名称比对象名称具有更多的限制,并且必须具有全局唯一性,因为每个存储分区都位于单个 Cloud Storage 命名空间中。如需了解详情,请参阅存储分区命名准则

存储分区标签

存储分区标签是键值元数据对,可让您对存储分区以及其他 Google Cloud 资源(例如虚拟机实例永久性磁盘)进行分组。例如,您可以使用标签来创建一个值为 alphabetadeltateam 键,并将 team:alphateam:betateam:delta 标签应用到不同的存储分区,以便指明哪个团队与这些存储分区关联。

您可以为每个存储分区应用多个标签(每个存储分区最多可以有 64 个标签)。

  • 键和值的长度均不能超过 63 个字符。
  • 键和值只能包含小写字母、数字字符、下划线和短划线。允许使用国际字符。
  • 标签键必须以小写字母开头,允许使用国际字符。
  • 标签键不能为空。
  • 与存储分区元数据的通常情况一样,存储分区标签与个别对象或对象元数据没有关联。

如需查看在结算中使用标签来整理资源的一般示例,请参阅将结算数据导出至 BigQuery 查询的示例

对象

对象是您存储在 Cloud Storage 中的各个数据。 您可以在存储分区中创建的对象数量不受限制。

对象包含两个组成部分:对象数据对象元数据。对象数据通常是您要存储在 Cloud Storage 中的文件。对象元数据是描述各种对象特质的“名称-值”对的集合。

对象名称

对象的名称在 Cloud Storage 中被视为一项对象元数据。 对象名称可以包含 Unicode 字符的任意组合(采用 UTF-8 编码),长度不得超过 1024 个字节,并且在存储分区中必须是唯一的。

Cloud Storage 使用平面命名空间来存储对象,这意味着 Cloud Storage 会将给定存储分区中的所有对象视为不具有任何层次关系的独立对象。为方便起见,诸如 Google Cloud Consolegsutil 等工具在处理使用斜杠 (/) 字符的对象时,可以假定这些对象存储在某个虚拟层次结构中

例如,您可以将某个对象命名为 /europe/france/paris.jpg,将另一个对象命名为 /europe/france/cannes.jpg。使用 Cloud Console 时,您可以导航到这些对象,假定它们位于 europefrance 文件夹下的目录层次结构中。

有关详情(包括如何重命名对象),请参阅对象命名准则

对象版本和世代号

Cloud Storage 中的对象可以具有不同的版本:默认情况下,当您替换对象时,Cloud Storage 会删除旧版本并添加新版本。如果为存储分区启用了对象版本控制功能,则当发生替换或删除操作时,旧版本将保留在存储分区中。

每个对象版本都由其世代号唯一标识,您可以在对象的元数据中找到该编号。在对象版本控制功能创建对象的旧版本后,您可以使用世代号来引用此旧版本。这样,您就可以恢复存储分区中被替换的对象,或永久删除不再需要的旧对象版本。在请求中加入前提条件时也会使用世代号。

资源

资源是 Google Cloud 中的实体。Google Cloud 中的每个项目、存储分区和对象都属于资源,Compute Engine 实例等也属于资源。

资源名称

每个资源都有一个唯一名称作为标识,就像文件名一样。 存储分区的资源名称采用 projects/_/buckets/BUCKET_NAME 的形式,其中,BUCKET_NAME 是存储分区的 ID。对象的资源名称采用 projects/_/buckets/BUCKET_NAME/objects/OBJECT_NAME 的形式,其中,OBJECT_NAME 是对象的 ID。

附加到资源名称末尾的 #NUMBER 表示对象的特定世代。#0 是最新对象版本的特殊标识符。当对象的名称以字符串结尾时,建议您添加 #0,否则该字符串将被解读为世代号。

网络用量

网络用量表示发送到 Cloud Storage 或从中发送的数据。

出站流量

出站流量表示通过 HTTP 响应从 Cloud Storage 发送的数据。从 Cloud Storage 存储分区读取的数据或元数据是出站流量的一个例子。

如需了解详情,请参阅 Cloud Storage 价格页面。

入站流量

入站流量表示通过 HTTP 请求发送到 Cloud Storage 的数据。写入 Cloud Storage 存储分区的数据或元数据是入站流量的一个例子。

如需了解详情,请参阅 Cloud Storage 价格页面。

地理位置冗余

具有地理位置冗余性的数据会以冗余方式存储在至少两个不同的地理位置,并且这些位置之间至少相隔 100 英里。存储在多区域位置和双区域位置的对象会具有地理位置冗余性,无论其存储类别如何。

系统将异步执行地理位置冗余操作,但是,所有 Cloud Storage 数据都会在被上传时立即冗余到至少一个地理位置。

即使发生大规模中断(比如自然灾害),地理位置冗余功能也可确保数据具备最高的可用性。双区域位置会使用两个特定的区域位置实现地理位置冗余。多区域位置会组合使用指定多区域位置内的任意数据中心来实现地理位置冗余,其中可能包括未明确列为可用区域的数据中心。

数据不透明性

对象的数据部分对 Cloud Storage 是完全不透明的。对于 Cloud Storage 而言,这只是一堆数据而已。

对象不变性

对象是不可变的,也就是说,对象一经上传,在整个存储生命周期内就不会变化。对象的存储生命周期指的是从成功创建(上传)对象到成功删除对象所经历的时间。 实际上,这意味着您无法对对象进行增量更改,例如执行附加操作或截断操作。但是,您可以替换存储在 Cloud Storage 中的对象,并且此操作将以原子方式进行:在上传完新版本之前,系统会继续将对象的旧版本传送给读取者,而在上传完成之后,系统则会将对象的新版本传送给读取者。因此,单次替换操作只是标记了一个不可变对象的生命周期结束以及一个新的不可变对象的生命周期开始。

您可以在存储分区中创建或更新不同对象的频率没有限制。但是,单个特定对象每秒最多只能更新或替换一次。例如,如果您在存储分区 foo 中有一个对象 bar,那么您应该按照大约每秒一次的频率上传 foo/bar 的一个新副本。以高于每秒一次的频率更新同一对象可能会导致 429 Too Many Requests 错误。

您应该使用截断指数退避算法重试失败的请求。