使用 Java 设置或更改块 blob 的访问层

本文介绍了如何使用适用于 Java 的 Azure 存储客户端库设置或更改块 blob 的访问层。

先决条件

  • 本文假设已经设置了项目来使用适用于 Java 的 Azure Blob 存储客户端库。 要了解有关设置项目的信息,包括包安装、添加 import 指令和创建授权客户端对象,请参阅开始使用 Azure 存储和 Java
  • 授权机制必须具有设置 blob 的访问层的权限。 若要了解详细信息,请参阅以下 REST API 操作的授权指南:

关于块 blob 访问层

要管理存储需求产生的成本,根据数据的访问频率和所需的保留期来整理数据会很有帮助。 Azure 存储提供不同的访问层,以便你可以基于使用方式,以最具成本效益的方式存储 Blob 数据。

Blob 数据的访问层

Azure 存储访问层包括:

  • 热层 - 适用于存储经常访问或修改的数据的联机层。 热层的存储成本最高,但访问成本最低。
  • 冷层 - 适用于存储不经常访问或修改的数据的联机层。 冷层中的数据应至少存储 30 天。 与热层相比,冷层的存储成本较低,访问成本较高。
  • 寒层 - 适用于存储不经常访问或修改的数据的联机层。 寒层中的数据应至少存储 90 天。 与冷层相比,寒层的存储成本较低,访问成本较高。
  • 存档层 - 适用于存储极少访问且延迟要求(以小时计)不严格的数据的脱机层。 存档层中的数据应至少存储 180 天。

若要详细了解访问层,请参阅 Blob 数据的访问层

当 Blob 位于存档访问层时,则会将其视为处于脱机状态,无法读取或修改。 若要读取或修改存档 Blob 中的数据,必须先将 Blob 解除冻结到联机层。 若要详细了解如何将 Blob 从存档层解除冻结到联机层,请参阅从存档层解除冻结 Blob

限制

仅允许在块 Blob 上设置访问层。 若要了解有关设置块 Blob 访问层的限制的详细信息,请参阅设置 Blob 层 (REST API)

注意

若要使用 Java 将访问层设置为 Cold,必须至少使用客户端库版本 12.21.0。

在上传期间设置 Blob 的访问层

可以使用 BlobUploadFromFileOptions 类在上传时设置 blob 的访问层。 以下代码示例演示如何在上传 blob 时设置访问层:

public void uploadBlobWithAccessTier(BlobContainerClient blobContainerClient, Path filePath) {
    String fileName = filePath.getFileName().toString();
    BlobClient blobClient = blobContainerClient.getBlobClient(fileName);

    BlobUploadFromFileOptions options = new BlobUploadFromFileOptions(filePath.toString())
            .setTier(AccessTier.COOL);

    try {
        Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);
    } catch (UncheckedIOException ex) {
        System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
    }
}

要详细了解如何使用 Java 上传 blob,请参阅使用 Java 上传 blob

更改现有的块 blob 的访问层

可以使用以下方法之一更改现有的块 blob 的访问层:

以下代码示例演示如何将现有 blob 的访问层更改为冷层:

public void changeBlobAccessTier(BlobClient blobClient) {
    // Change the blob's access tier to cool
    blobClient.setAccessTier(AccessTier.COOL);
}

如果要解除冻结存档的 Blob,请使用 setAccessTierWithResponse 方法。 将 tier 参数设置为 HOTCOOLARCHIVE 的有效 AccessTier 值。 可以选择将 priority 参数设置为有效的 RehydratePriorityHIGHSTANDARD

下面的代码示例演示如何通过将访问层更改为热层来解除冻结存档的 Blob:

public void rehydrateBlobSetAccessTier(BlobClient blobClient) {
    // Rehydrate the blob to hot tier using a standard rehydrate priority
    blobClient.setAccessTierWithResponse(
        AccessTier.HOT,
        RehydratePriority.STANDARD,
        null, 
        null, 
        null);
}

setAccessTierWithResponse 方法还可以接受 BlobSetAccessTierOptions 参数来指定配置选项。

将 blob 复制到不同的访问层

可以通过将访问层指定为复制操作的一部分来更改现有块 Blob 的访问层。 若要在复制操作期间更改访问层,请使用 BlobBeginCopyOptions 类。

可以使用 setTier 方法将 AccessTier 值指定为 HOTCOOLARCHIVE。 如果要使用复制操作从存档层解除冻结 Blob,请使用 setRehydratePriority 方法将 RehydratePriority 值指定为 HIGHSTANDARD

下面的代码示例演示如何使用复制操作将存档的 blob 解除冻结到热层:

public void rehydrateBlobUsingCopy(
    BlobClient sourceArchiveBlob,
    BlobClient destinationRehydratedBlob) {
    // Note: the destination blob must have a different name than the archived source blob

    // Start the copy operation and wait for it to complete
    final SyncPoller<BlobCopyInfo, Void> poller = destinationRehydratedBlob.beginCopy(
            new BlobBeginCopyOptions(sourceArchiveBlob.getBlobUrl())
                    .setTier(AccessTier.HOT)
                    .setRehydratePriority(RehydratePriority.STANDARD));
                    
    PollResponse<BlobCopyInfo> response = poller
            .waitUntil(LongRunningOperationStatus.SUCCESSFULLY_COMPLETED);
}

若要详细了解如何使用 Java 复制 blob,请参阅使用 Java 复制 blob

资源

若要详细了解如何使用适用于 Java 的 Azure Blob 存储客户端库来设置访问层,请参阅以下资源。

REST API 操作

Azure SDK for Java 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 Java 范例与 REST API 操作进行交互。 用于设置访问层的客户端库方法使用以下 REST API 操作:

客户端库资源

代码示例

另请参阅