OSS提供三種儲存類型,本文介紹Archive Storage類型(Archive)的儲存空間的建立與使用。

建立Archive Storage類型的儲存空間

您可以通過控制台、API/SDK和命令列工具建立Archive Storage類型的儲存空間。

  • 通過控制台建立

    通過控制台建立Archive Storage類型的儲存空間,儲存類型選擇歸檔,如下圖所示。



  • 通過API/SDK建立

    以Java SDK為例:

    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    CreateBucketRequest createBucketRequest=new CreateBucketRequest(bucketName);
    // 設定bucket許可權為公共讀,預設是私有讀寫 createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
    // 設定bucket儲存類型為歸檔類型,預設是標準類型
    createBucketRequest.setStorageClass(StorageClass.Archive);
    ossClient.createBucket(createBucketRequest);
    createBucketRequest.setStorageClass(StorageClass.Archive);即設定建立的儲存空間的儲存類型為Archive Storage類型。
  • 通過OSS命令列工具建立
    以OSSUtil為例:
    ./ossutil mb oss://[bucket name] --storage-class=Archive
    [bucket name]為需要建立的儲存空間名稱。指定--storage-class的參數為Archive,用來建立Archive Storage類型的儲存空間。

使用Archive Storage類型

  • 上傳數據

    Archive Storage類型儲存空間支援PutObject和MultipartUpload兩種上傳方式,不支援AppendObject。基於PutObject和MultipartUpload開發的上傳應用可以直接使用Archive Storage類型。

  • 下載數據

    Archive Storage類型的數據讀取方式與標準儲存類型和低頻訪問類型的數據讀取方式有所區別。歸檔類型數據在讀取前需要先執行restore操作解凍到可讀取狀態,解凍過程需要1分鐘時間。

    歸檔檔案的狀態變換過程如下:

    1. 歸檔類型的檔案初始時處於冷凍狀態。
    2. 提交解凍(restore)操作後,服務端執行解凍,檔案處於解凍中狀態。
    3. 完成解凍後,可以讀取檔案。
    4. 解凍狀態預設持續1天,最多延長7天,之後檔案又回到冷凍狀態。

解凍方式有如下幾種:

  • 使用控制台解凍

    對需要讀取的檔案,執行解凍操作,解凍過程預計花費1分鐘。期間可以查詢到object處於解凍中狀態。



  • 使用API/SDK解凍

    以Java SDK舉例,調用restoreObject方法進行object解凍:

    ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, key);
    // check whether the object is archive class
    StorageClass storageClass = objectMetadata.getObjectStorageClass();
    if (storageClass == StorageClass.Archive) {
        // restore object
        ossClient.restoreObject(bucketName, key);
        // wait for restore completed
        do {
            Thread.sleep(1000);
            objectMetadata = ossClient.getObjectMetadata(bucketName, key);
        } while (!objectMetadata.isRestoreCompleted());
    }
    // get restored object
    OSSObject ossObject = ossClient.getObject(bucketName, key);
    ossObject.getObjectContent().close();
  • 使用OSS命令列工具解凍
    以OSSUtil為例:
    ./ossutil restore oss://[Bucket name]/[Object name]

    [Bucket name][Object name]為需要做解凍操作的bucket和object名稱。