Dengan pengindeksan data OSS, Anda dapat mengagregasi statistik secara efisien untuk jumlah objek yang sangat besar, seperti jumlah dan ukuran objek. Dibandingkan dengan metode tradisional yang menggunakan operasi ListObjects, pengindeksan data secara signifikan meningkatkan efisiensi dan menyederhanakan proses, sehingga ideal untuk skenario agregasi data skala besar.
Manfaat
Sebuah perusahaan menyimpan 200 juta objek, yang diorganisasi berdasarkan awalan bisnis ke dalam 1,8 juta direktori, di sebuah bucket bernama mybucket di wilayah China (Guangzhou). Dengan menggunakan pengindeksan data OSS, waktu yang diperlukan untuk agregasi objek berkurang sebesar 83%.
|
Metode tradisional |
Pengindeksan data OSS |
|
|
Durasi |
Agregasi harian memerlukan waktu 2 jam |
Agregasi harian memerlukan waktu 20 menit |
|
Kompleksitas |
Untuk direktori yang berisi lebih dari 1.000 objek, Anda harus memanggil operasi |
Anda hanya perlu memanggil operasi |
Ikhtisar
Proses ini mencakup langkah-langkah berikut:
-
Aktifkan pengindeksan data: OSS secara otomatis membuat tabel indeks yang mencakup metadata objek, metadata kustom, dan tag objek.
-
Lakukan kueri dan agregasi: Tetapkan kondisi kueri, lalu panggil operasi DoMetaQuery. OSS melakukan kueri cepat.
Akhirnya, OSS mengembalikan statistik untuk objek yang sesuai, seperti jumlah total, ukuran total, dan ukuran rata-rata.
Mulai cepat
Langkah 1: Aktifkan pengindeksan data
Konsol OSS
-
Masuk ke Konsol OSS.
-
Di panel navigasi kiri, klik Buckets. Di halaman Buckets, klik nama bucket tujuan.
-
Di panel navigasi kiri, pilih .
-
Di halaman Data Indexing, jika Anda menggunakan fitur ini untuk pertama kalinya, ikuti petunjuk di layar untuk memberikan izin kepada role
AliyunMetaQueryDefaultRole. Hal ini memungkinkan layanan OSS mengelola data di bucket Anda. Setelah memberikan izin, klik Enable data indexing. -
Pilih MetaSearch dan klik Enable.
OSS SDK
Hanya OSS SDK untuk Java, Python, dan Go yang mendukung fitur MetaSearch untuk mengkueri objek yang memenuhi kondisi tertentu.
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
public class Demo {
// Gunakan endpoint aktual Anda. Contoh ini menggunakan endpoint untuk wilayah China (Guangzhou).
private static String endpoint = "https://oss-cn-guangzhou.aliyuncs.com";
// Tentukan nama bucket Anda, misalnya, "examplebucket".
private static String bucketName = "examplebucket";
public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException {
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Guangzhou), atur wilayah menjadi cn-guangzhou.
String region = "cn-guangzhou";
// Buat instance OSSClient.
// Saat instance OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Aktifkan fitur pengindeksan data.
ossClient.openMetaQuery(bucketName);
} catch (OSSException oe) {
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Error Message: " + ce.getMessage());
} finally {
// Matikan instance OSSClient.
ossClient.shutdown();
}
}
}
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel sebelum menjalankan kode.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint untuk wilayah tempat bucket Anda berada. Misalnya, jika bucket berada di wilayah China (Guangzhou), atur endpoint menjadi https://oss-cn-guangzhou.aliyuncs.com.
endpoint = "https://oss-cn-guangzhou.aliyuncs.com"
# Tentukan wilayah yang sesuai dengan endpoint. Contoh: cn-guangzhou. Parameter ini diperlukan jika Anda menggunakan Signature Version 4.
region = "cn-guangzhou"
# Tentukan nama bucket Anda, misalnya, "examplebucket".
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Aktifkan fitur pengindeksan data.
bucket.open_bucket_meta_query()package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
var (
region string // Menyimpan wilayah dari flag command-line.
bucketName string // Menyimpan nama bucket dari flag command-line.
)
// Fungsi init dieksekusi sebelum main untuk menginisialisasi program.
func init() {
// Tambahkan flag command-line untuk wilayah.
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
// Tambahkan flag command-line untuk nama bucket.
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
flag.Parse() // Parsing flag command-line.
// Periksa apakah nama bucket telah diberikan. Jika tidak, cetak flag dan keluar.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
}
// Periksa apakah wilayah telah diberikan. Jika tidak, cetak flag dan keluar.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
// Buat konfigurasi klien yang menggunakan penyedia kredensial dari variabel lingkungan.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // Buat klien OSS dari konfigurasi.
// Bangun permintaan untuk mengaktifkan pengindeksan data untuk bucket.
request := &oss.OpenMetaQueryRequest{
Bucket: oss.Ptr(bucketName), // Tentukan bucket target.
}
result, err := client.OpenMetaQuery(context.TODO(), request) // Eksekusi permintaan untuk mengaktifkan pengindeksan data.
if err != nil {
log.Fatalf("gagal membuka meta query %v", err)
}
log.Printf("hasil open meta query:%#v\n", result) // Cetak hasilnya.
}Langkah 2: Lakukan kueri dan agregasi
Konsol OSS
Tetapkan kondisi kueri
-
Di panel navigasi kiri, pilih Object Management > Data Indexing.
-
Untuk Storage Class, pilih Standard. Untuk ACL, pilih private.
-
Gunakan Fuzzy Match untuk awalan objek dan masukkan
a/b.
Konfigurasi hasil output
-
Urutkan hasil secara descending berdasarkan Last Modified At.
-
Hitung Sum dan Average dari ukuran objek yang difilter.
-
Gunakan Group Count berdasarkan Storage Class untuk menghitung jumlah objek.
-
Klik Query Now.
OSS SDK
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.ArrayList;
import java.util.List;
public class Demo {
// Endpoint wilayah China (Guangzhou) digunakan sebagai contoh. Gantilah dengan endpoint aktual.
private static String endpoint = "https://oss-cn-guangzhou.aliyuncs.com";
// Tentukan nama bucket. Contoh: examplebucket.
private static String bucketName = "examplebucket";
public static void main(String[] args) throws Exception {
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Guangzhou), atur wilayah menjadi cn-guangzhou.
String region = "cn-guangzhou";
// Buat instance OSSClient.
// Saat instance OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Tetapkan jumlah maksimum objek yang akan dikembalikan.
int maxResults = 20;
// Tetapkan kondisi kueri: nama file sesuai "a/b", kelas penyimpanan adalah "Standard", dan ACL adalah "private".
// Kueri menggunakan operator "and" untuk menghubungkan subkueri.
String query = "{\n" +
" \"Operation\": \"and\",\n" +
" \"SubQueries\": [\n" +
" {\n" +
" \"Field\": \"Filename\",\n" +
" \"Value\": \"a/b\",\n" +
" \"Operation\": \"match\"\n" +
" },\n" +
" {\n" +
" \"Field\": \"OSSStorageClass\",\n" +
" \"Value\": \"Standard\",\n" +
" \"Operation\": \"eq\"\n" +
" },\n" +
" {\n" +
" \"Field\": \"ObjectACL\",\n" +
" \"Value\": \"private\",\n" +
" \"Operation\": \"eq\"\n" +
" }\n" +
" ]\n" +
"}";
String sort = "FileModifiedTime";// Urutkan berdasarkan waktu modifikasi terakhir.
// Buat agregasi untuk menghitung jumlah, rata-rata, dan total ukuran objek.
Aggregation aggregationRequest1 = new Aggregation();
aggregationRequest1.setField("Size");// Agregasi berdasarkan ukuran.
aggregationRequest1.setOperation("sum");// Hitung total.
Aggregation aggregationRequest2 = new Aggregation();
aggregationRequest2.setField("Size");// Agregasi berdasarkan ukuran.
aggregationRequest2.setOperation("count");// Hitung jumlah.
Aggregation aggregationRequest3 = new Aggregation();
aggregationRequest3.setField("Size");// Agregasi berdasarkan ukuran.
aggregationRequest3.setOperation("average");// Hitung rata-rata.
// Tambahkan permintaan agregasi ke dalam daftar.
Aggregations aggregations = new Aggregations();
List<Aggregation> aggregationList = new ArrayList<>();
aggregationList.add(aggregationRequest1);// Tambahkan agregasi total.
aggregationList.add(aggregationRequest2);// Tambahkan agregasi jumlah.
aggregationList.add(aggregationRequest3);// Tambahkan agregasi rata-rata.
aggregations.setAggregation(aggregationList);// Tetapkan agregasi untuk permintaan.
// Buat DoMetaQueryRequest.
DoMetaQueryRequest doMetaQueryRequest = new DoMetaQueryRequest(bucketName, maxResults, query, sort);
// Tambahkan agregasi ke permintaan.
doMetaQueryRequest.setAggregations(aggregations);
// Tetapkan urutan pengurutan menjadi descending.
doMetaQueryRequest.setOrder(SortOrder.DESC);
// Eksekusi meta query.
DoMetaQueryResult doMetaQueryResult = ossClient.doMetaQuery(doMetaQueryRequest);
// Proses hasil kueri.
if (doMetaQueryResult.getFiles() != null) {
// Jika file dikembalikan, iterasi dan cetak informasinya.
for (ObjectFile file : doMetaQueryResult.getFiles().getFile()) {
System.out.println("Filename: " + file.getFilename()); // Nama file
System.out.println("ETag: " + file.getETag());// ETag
System.out.println("ObjectACL: " + file.getObjectACL()); // ACL
System.out.println("OssObjectType: " + file.getOssObjectType());// Jenis objek
System.out.println("OssStorageClass: " + file.getOssStorageClass());// Kelas penyimpanan
System.out.println("TaggingCount: " + file.getOssTaggingCount()); // Jumlah tag
if (file.getOssTagging() != null) {
// Cetak tag objek.
for (Tagging tag : file.getOssTagging().getTagging()) {
System.out.println("Key: " + tag.getKey());
System.out.println("Value: " + tag.getValue());
}
}
if (file.getOssUserMeta() != null) {
// Cetak metadata pengguna.
for (UserMeta meta : file.getOssUserMeta().getUserMeta()) {
System.out.println("Key: " + meta.getKey());
System.out.println("Value: " + meta.getValue());
}
}
}
} else if (doMetaQueryResult.getAggregations() != null) {
// Jika agregasi dikembalikan, iterasi dan cetak hasilnya.
for (Aggregation aggre : doMetaQueryResult.getAggregations().getAggregation()) {
System.out.println("Field: " + aggre.getField());// Bidang agregasi
System.out.println("Operation: " + aggre.getOperation()); // Operasi agregasi
System.out.println("Value: " + aggre.getValue());// Nilai hasil agregasi
if (aggre.getGroups() != null && aggre.getGroups().getGroup().size() > 0) {
// Dapatkan nilai agregasi yang dikelompokkan.
System.out.println("Groups value: " + aggre.getGroups().getGroup().get(0).getValue());
// Dapatkan jumlah total agregasi yang dikelompokkan.
System.out.println("Groups count: " + aggre.getGroups().getGroup().get(0).getCount());
}
}
} else {
System.out.println("NextToken: " + doMetaQueryResult.getNextToken());
}
} catch (OSSException oe) {
// Tangani exception OSS.
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
// Tangani dan cetak exception klien.
System.out.println("Error Message: " + ce.getMessage());
} finally {
// Matikan instance OSSClient.
ossClient.shutdown();
}
}
}# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import MetaQuery, AggregationsRequest
import json
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Guangzhou), atur endpoint menjadi https://oss-cn-guangzhou.aliyuncs.com.
endpoint = "https://oss-cn-guangzhou.aliyuncs.com"
# Tentukan wilayah yang sesuai dengan endpoint. Contoh: cn-guangzhou. Parameter ini diperlukan jika Anda menggunakan Signature Version 4.
region = "cn-guangzhou"
# Tentukan nama bucket. Contoh: examplebucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Kondisi kueri: nama file sesuai "a/b", kelas penyimpanan adalah "Standard", dan ACL adalah "private".
query = {
"Operation": "and",
"SubQueries": [
{"Field": "Filename", "Value": "a/b", "Operation": "match"},
{"Field": "OSSStorageClass", "Value": "Standard", "Operation": "eq"},
{"Field": "ObjectACL", "Value": "private", "Operation": "eq"}
]
}
# Konversi kueri ke string JSON.
query_json = json.dumps(query)
# Buat agregasi untuk menghitung jumlah, rata-rata, dan total ukuran objek.
aggregations = [
AggregationsRequest(field="Size", operation="sum"), # Hitung total ukuran objek.
AggregationsRequest(field="Size", operation="count"), # Hitung jumlah objek.
AggregationsRequest(field="Size", operation="average") # Hitung rata-rata ukuran objek.
]
# Buat permintaan MetaQuery, menentukan kondisi kueri, jumlah maksimum hasil, bidang dan urutan pengurutan, serta agregasi.
do_meta_query_request = MetaQuery(
max_results=20, # Kembalikan maksimal 20 objek.
query=query_json, # Tetapkan kondisi kueri.
sort="FileModifiedTime", # Urutkan berdasarkan waktu modifikasi terakhir.
order="desc", # Urutkan secara descending.
aggregations=aggregations # Tetapkan operasi agregasi.
)
# Eksekusi meta query.
result = bucket.do_bucket_meta_query(do_meta_query_request)
# Cetak informasi untuk objek yang sesuai.
if result.files:
for file in result.files:
print(f"Filename: {file.file_name}") # Cetak nama file.
print(f"ETag: {file.etag}") # Cetak ETag.
print(f"ObjectACL: {file.object_acl}") # Cetak daftar kontrol akses (ACL).
print(f"OssObjectType: {file.oss_object_type}") # Cetak jenis objek OSS.
print(f"OssStorageClass: {file.oss_storage_class}") # Cetak kelas penyimpanan.
print(f"TaggingCount: {file.oss_tagging_count}") # Cetak jumlah tag.
# Cetak semua tag objek.
if file.oss_tagging:
for tag in file.oss_tagging:
print(f"Key: {tag.key}") # Cetak kunci tag.
print(f"Value: {tag.value}") # Cetak nilai tag.
# Cetak metadata pengguna objek.
if file.oss_user_meta:
for meta in file.oss_user_meta:
print(f"Key: {meta.key}") # Cetak kunci metadata pengguna.
print(f"Value: {meta.value}") # Cetak nilai metadata pengguna.
# Cetak hasil agregasi.
if result.aggregations:
for aggre in result.aggregations:
print(f"Field: {aggre.field}") # Cetak bidang agregasi.
print(f"Operation: {aggre.operation}") # Cetak jenis operasi agregasi (seperti sum, count, average).
print(f"Value: {aggre.value}") # Cetak nilai hasil agregasi.package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
var (
region string // Menyimpan wilayah dari flag command-line.
bucketName string // Menyimpan nama bucket dari flag command-line.
)
// Fungsi init dieksekusi sebelum main untuk menginisialisasi program.
func init() {
// Tambahkan flag command-line untuk wilayah.
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
// Tambahkan flag command-line untuk nama bucket.
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
flag.Parse() // Parsing flag command-line.
// Periksa apakah nama bucket telah diberikan. Jika tidak, cetak flag dan keluar.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
}
// Periksa apakah wilayah telah diberikan. Jika tidak, cetak flag dan keluar.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
// Buat konfigurasi klien yang menggunakan penyedia kredensial dari variabel lingkungan dan wilayah yang ditentukan.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // Buat klien OSS dari konfigurasi.
// Bangun kondisi kueri: nama file sesuai "a/b", kelas penyimpanan adalah "Standard", dan ACL adalah "private".
query := map[string]interface{}{
"Operation": "and",
"SubQueries": []map[string]interface{}{
{"Field": "Filename", "Value": "a/b", "Operation": "match"},
{"Field": "OSSStorageClass", "Value": "Standard", "Operation": "eq"},
{"Field": "ObjectACL", "Value": "private", "Operation": "eq"},
},
}
// Marshal kueri ke string JSON.
queryJSON, err := json.Marshal(query)
if err != nil {
log.Fatalf("gagal marshal kueri %v", err)
}
// Buat agregasi untuk menghitung jumlah, rata-rata, dan total ukuran objek.
aggregations := []oss.MetaQueryAggregation{
{Field: oss.Ptr("Size"), Operation: oss.Ptr("sum")}, // Hitung total.
{Field: oss.Ptr("Size"), Operation: oss.Ptr("count")}, // Hitung jumlah.
{Field: oss.Ptr("Size"), Operation: oss.Ptr("average")}, // Hitung rata-rata.
}
// Bangun permintaan DoMetaQuery.
request := &oss.DoMetaQueryRequest{
Bucket: oss.Ptr(bucketName), // Tentukan bucket untuk dikueri.
MetaQuery: &oss.MetaQuery{
MaxResults: oss.Ptr(int64(20)), // Hasil maksimum yang dikembalikan: 20.
Query: oss.Ptr(string(queryJSON)), // Tetapkan kondisi kueri.
Sort: oss.Ptr("FileModifiedTime"), // Urutkan berdasarkan waktu modifikasi terakhir.
Order: oss.Ptr(oss.MetaQueryOrderDesc), // Urutkan secara descending.
Aggregations: &oss.MetaQueryAggregations{
Aggregations: aggregations}, // Tetapkan operasi agregasi.
},
}
result, err := client.DoMetaQuery(context.TODO(), request) // Kirim permintaan meta query.
if err != nil {
log.Fatalf("gagal melakukan meta query %v", err)
}
// Cetak NextToken untuk pagination.
fmt.Printf("NextToken:%s\n", *result.NextToken)
// Iterasi melalui hasil dan cetak detail file.
for _, file := range result.Files {
fmt.Printf("File name: %s\n", *file.Filename)
fmt.Printf("size: %d\n", file.Size)
fmt.Printf("File Modified Time:%s\n", *file.FileModifiedTime)
fmt.Printf("Oss Object Type:%s\n", *file.OSSObjectType)
fmt.Printf("Oss Storage Class:%s\n", *file.OSSStorageClass)
fmt.Printf("Object ACL:%s\n", *file.ObjectACL)
fmt.Printf("ETag:%s\n", *file.ETag)
fmt.Printf("Oss CRC64:%s\n", *file.OSSCRC64)
if file.OSSTaggingCount != nil {
fmt.Printf("Oss Tagging Count:%d\n", *file.OSSTaggingCount)
}
// Cetak informasi tag objek.
for _, tagging := range file.OSSTagging {
fmt.Printf("Oss Tagging Key:%s\n", *tagging.Key)
fmt.Printf("Oss Tagging Value:%s\n", *tagging.Value)
}
// Cetak metadata yang ditentukan pengguna.
for _, userMeta := range file.OSSUserMeta {
fmt.Printf("Oss User Meta Key:%s\n", *userMeta.Key)
fmt.Printf("Oss User Meta Key Value:%s\n", *userMeta.Value)
}
}
// Cetak hasil agregasi.
for _, aggregation := range result.Aggregations {
fmt.Printf("Aggregation Field:%s\n", *aggregation.Field)
fmt.Printf("Aggregation Operation:%s\n", *aggregation.Operation)
fmt.Printf("Aggregation Value:%f\n", *aggregation.Value)
}
}
Langkah 3: Verifikasi hasil
Konsol OSS
Total ukuran 100 objek Standard yang sesuai adalah 19,53 MB, dan ukuran rata-rata setiap objek sekitar 200 KB.
Halaman hasil kueri terdiri dari dua bagian: Object Data Aggregation Results dan File List. Bagian hasil agregasi menampilkan total dan rata-rata ukuran objek, serta jumlah kelompok berdasarkan kelas penyimpanan. Bagian daftar file menampilkan informasi detail untuk setiap objek, seperti namanya (misalnya, a/b/report9.txt), ukuran, jenis objek, kelas penyimpanan, ACL (private), dan waktu modifikasi terakhir.
OSS SDK
Total ukuran 100 objek Standard yang sesuai adalah 19,53 MB, dan ukuran rata-rata setiap objek sekitar 200 KB.
Field: Size
Operation: sum
Value: 2.048E7
Field: Size
Operation: count
Value: 100.0
Field: Size
Operation: average
Value: 204800.0
Referensi
-
Untuk kustomisasi lanjutan, Anda dapat langsung membuat permintaan REST API. Hal ini memerlukan perhitungan manual signature permintaan. Untuk informasi selengkapnya, lihat Signature Version 4 dan DoMetaQuery.