你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

了解块 blob、追加 blob 和页 blob

存储服务提供三种类型的 Blob、 块 Blob追加 Blob页 Blob。 创建 Blob 时将指定 Blob 类型。 创建 Blob 后,无法更改其类型,并且只能通过使用适用于该 Blob 类型的操作进行更新, 将块或块列表写入块 blob、将块追加到追加 Blob 以及将页写入页 Blob。

所有 Blob 都将立即反映提交的更改。 每个版本的 Blob 均具有一个名为“ETag”的唯一标记,可以将该标记与访问条件配合使用以确保你仅更改 Blob 的特定实例。

可租用任何 Blob 来进行独占的写入访问。 在租用 Blob 时,仅包含当前租用 ID 的调用可修改 Blob 或(针对块 Blob)其块。

可在快照中重复任何 Blob。 有关快照的信息,请参阅 创建 Blob 的快照

注意

Azure 存储模拟器中的 Blob 最大大小限制为 2 GiB。

关于块 Blob

块 blob 经过优化,可高效地上传大量数据。 块 Blob 由块组成,每个块都由块 ID 标识。 一个块 blob 最多可包含 5 万个块。 块 Blob 中的每个块的大小可能不同,最大大小为正在使用的服务版本允许的最大大小。 若要创建或修改块 Blob,请通过 “放置块” 操作编写一组块,然后使用“ 放置块列表” 操作将这些块提交到 Blob。

小于特定大小的 blob (由服务版本) 确定,可以通过 Put Blob 进行单个写入操作来完整上传。

下表描述了服务版本允许的最大块大小和 blob 大小。

服务版本 最大块大小(通过放置块) 最大 blob 大小(通过放置块列表) 通过单个写入操作的最大 blob 大小(通过放置 Blob)
版本 2019-12-12 和更高版本 4000 MiB 大约 190.7 TiB(4000 MiB X 50,000 块) 5000 MiB
版本 2016-05-31 到版本 2019-07-07 100 MiB 大约 4.75 TiB(100 MiB X 50,000 块) 256 MiB
2016-05-31 之前的版本 4 MiB 大约 195 GiB(4 MiB X 50,000 块) 64 MiB

存储客户端默认为 128 MiB 的最大单个 Blob 上传,可使用 BlobRequestOptions 对象的 SingleBlobUploadThresholdInBytes 属性在 .NET 版本 11 的 Azure 存储客户端库中设置。 当块 Blob 上载大于此属性中的值时,存储客户端会将文件分为多个块。 可以使用 BlobRequestOptions 对象的 ParallelOperationThreadCount 属性设置用于按请求并行上传块的线程数。

当您将一个块上载到存储帐户中的 Blob 时,该块将与指定的块 Blob 关联,但它不会成为 Blob 的一部分,直到您提交包含新块的 ID 的块列表。 在明确提交或丢弃新块之前,这些块将保持未提交状态。 最多可以有 100,000 个未提交的块。 编写块不会更新现有 Blob 的上次修改时间。

块 Blob 包含一些功能,可帮助你通过网络管理大型文件。 利用块 Blob,你可以并行方式上载多个块以减少上载时间。 每个块均可包含一个 MD5 哈希来验证传输,因此你可以跟踪上载进度并根据需要重新发送块。 可以按任意顺序上载块,并确定这些块在最终块列表提交步骤中的顺序。 您也可以上载新块来替换具有相同的块 ID 的现有未提交块。 在这些块被丢弃之前,您有一周的时间将它们提交到 Blob。 此外,如果在执行块列表提交操作时未包含这些块,则它们也将被丢弃。

可以通过插入、替换或删除现有块来修改现有块 Blob。 在上载已发生更改的一个或多个块后,可以使用单个提交操作将要保留的现有块与新块一起提交来提交新版本的 Blob。 若要在已提交的 Blob 的两个不同的位置插入同一字节范围,则可在相同的提交操作中的两个位置提交相同的块。 对于任何提交操作,如果未找到任何块,则整个提交操作将失败并出现错误,而且不会修改 Blob。 任何块承诺都会覆盖 Blob 的现有属性和元数据,并丢弃所有未提交的块。

块 ID 是 Blob 中具有相等长度的字符串。 块客户端代码通常使用 Base-64 编码来将字符串规范为相等长度。 在使用 Base-64 编码时,预先编码的字符串必须小于或等于 64 个字节。 块 ID 值可在不同的 Blob 中重复。

如果为不存在的 Blob 编写块,则将创建一个长度为 0 字节的新块 Blob。 此 Blob 将出现在包含未提交的 Blob 的 Blob 列表中。 如果未将任何块提交到此 Blob,则会在上次成功上传块一周后放弃该块及其未提交的块。 此外,在使用单个步骤(而不是两步块上载并提交过程)创建具有相同名称的新 Blob 时,也将丢弃所有未提交的块。

关于页 Blob

页 blob 是已针对随机读写操作进行优化的 512 字节的页的集合。 若要创建页 Blob,请初始化页 Blob 并指定页 Blob 将增长到的最大大小。 若要添加或更新页 Blob 的内容,请通过指定与 512 字节页边界对齐的偏移量和范围来编写一个或多个页面。 对页 Blob 的写入只能覆盖一个页面、一些页面或最多 4 MiB 的页面 Blob。 对页 Blob 进行的写入操作将就地进行并立即提交到 Blob。 页 Blob 的最大大小为 8 TiB。

Azure 虚拟机磁盘由页 Blob 提供支持。 Azure 提供两种类型的持久磁盘存储:高级和标准。 页 Blob 的高级存储专为需要一致的高性能和低延迟的 Azure 虚拟机工作负载而设计。 有关详细信息,请参阅为 IaaS VM 选择磁盘类型一文中的高级固态硬盘 (SSD) 部分。 有关页 Blob 高级存储的可伸缩性目标的信息,请参阅 Azure 存储可伸缩性和性能目标

关于追加 Blob

追加 Blob 由块组成,针对追加操作进行了优化。 修改追加 Blob 时,块仅通过 追加块 操作添加到 Blob 的末尾。 不支持更新或删除现有块。 与块 Blob 不同,追加 Blob 不公开其块 ID。

追加 Blob 中的每个块的大小可能不同,最大为 4 MiB,追加 Blob 最多可以包含 50,000 个块。 因此,追加 blob 的最大大小略高于 195 GiB (4 MiB x 50,000 块) 。

另请参阅