تعيين أو تغيير طبقة وصول كائن ثنائي كبير الحجم للكتلة باستخدام TypeScript

توضح هذه المقالة كيفية تعيين أو تغيير طبقة وصول كائن ثنائي كبير الحجم باستخدام مكتبة عميل Azure Storage ل JavaScript.

المتطلبات الأساسية

  • تفترض الأمثلة في هذه المقالة أن لديك بالفعل مشروعا تم إعداده للعمل مع مكتبة عميل Azure Blob Storage ل JavaScript. للتعرف على إعداد مشروعك، بما في ذلك تثبيت الحزمة واستيراد الوحدات النمطية وإنشاء كائن عميل معتمد للعمل مع موارد البيانات، راجع بدء استخدام Azure Blob Storage وTypeScript.
  • يجب أن يكون لآلية التخويل أذونات لتعيين مستوى وصول الكائن الثنائي كبير الحجم. لمعرفة المزيد، راجع إرشادات التخويل لعملية REST API التالية:

حول مستويات الوصول إلى الكائن الثنائي كبير الحجم للكتلة

لإدارة تكاليف احتياجات التخزين، قد يكون من المفيد تنظيم بياناتك استنادا إلى مدى تكرار الوصول إليها ومدة الاحتفاظ بها. يوفر تخزين Azure طبقات وصول مختلفة بحيث يمكنك تخزين بيانات كائن ثنائي كبير الحجم بأكثر الطرق فعالية من حيث التكلفة بناءً على كيفية استخدامها.

مستويات الوصول لبيانات الكائن الثنائي كبير الحجم

تتضمن طبقات التخزين إلى Azure Storage ما يلي:

  • الطبقة الساخنة - طبقة عبر الإنترنت محسّنة لتخزين البيانات التي يتم الوصول إليها أو تعديلها بشكل متكرر. الطبقة الساخنة لديها أعلى تكاليف التخزين، ولكن أقل تكاليف الوصول.
  • الطبقة الباردة - طبقة عبر الإنترنت محسّنة لتخزين البيانات التي نادراً ما يتم الوصول إليها أو تعديلها. يجب تخزين البيانات في الطبقة الباردة لمدة لا تقل عن 30 يوما. يحتوي المستوى البارد على تكاليف تخزين أقل وتكاليف وصول أعلى مقارنة بالطبقة الساخنة.
  • الطبقة الباردة - طبقة عبر الإنترنت محسنة لتخزين البيانات التي يتم الوصول إليها أو تعديلها بشكل غير متكرر. يجب تخزين البيانات في الطبقة الباردة لمدة لا تقل عن 90 يوما. تحتوي الطبقة الباردة على تكاليف تخزين أقل وتكاليف وصول أعلى مقارنة بالطبقة الباردة.
  • الطبقة الأرشيفية - طبقة بلا اتصال محسّنة لتخزين البيانات التي نادراً ما يتم الوصول إليها، والتي لها متطلبات زمن انتقال مرنة، حسب ترتيب الساعات. يجب تخزين البيانات في مستوى الأرشيف لمدة لا تقل عن 180 يوما.

لمعرفة المزيد حول مستويات الوصول، راجع مستويات الوصول لبيانات الكائن الثنائي كبير الحجم.

أثناء وجود كائن ثنائي كبير الحجم في طبقة تخزين "الأرشيف"، فإنه يُعتبر غير متصل ولا يمكن قراءته أو تعديله. لقراءة البيانات أو تعديلها في كائن ثنائي كبير الحجم مؤرشف، يجب أولا إعادة ترطيب الكائن الثنائي كبير الحجم إلى طبقة عبر الإنترنت. لمعرفة المزيد حول إعادة ترطيب كائن ثنائي كبير الحجم من طبقة الأرشيف إلى طبقة عبر الإنترنت، راجع إعادة ترطيب Blob من طبقة الأرشيف.

القيود

يسمح بتعيين طبقة الوصول فقط على الكائنات الثنائية كبيرة الحجم للكتلة. لمعرفة المزيد حول القيود المفروضة على تعيين طبقة وصول كائن ثنائي كبير الحجم للكتلة، راجع تعيين طبقة Blob (REST API).

إشعار

لتعيين طبقة الوصول إلى Cold استخدام TypeScript، يجب استخدام الحد الأدنى لإصدار مكتبة العميل 12.13.0.

تعيين مستوى وصول كائن ثنائي كبير الحجم أثناء التحميل

لتحميل كائن ثنائي كبير الحجم إلى طبقة وصول معينة، استخدم BlockBlobUploadOptions. tier خيارات الخصائص هي: Hotأو CoolColdأو أو .Archive

async function uploadWithAccessTier(
  containerClient: ContainerClient
): Promise<BlockBlobClient> {
  // Create blob
  const timestamp = Date.now();
  const blobName = `myblob-${timestamp}`;
  console.log(`creating blob ${blobName}`);

  const fileContentsAsString = `Hello from a string`;

  const tags: Tags = {};

  // Upload blob to cool tier
  const uploadOptions: BlockBlobUploadOptions = {
    // access tier setting
    // 'Hot', 'Cool', or 'Archive'
    tier: 'Cool',

    // other properties
    metadata: undefined,
    tags
  };

  // Create blob client from container client
  const blockBlobClient: BlockBlobClient =
    await containerClient.getBlockBlobClient(blobName);

  // Upload string
  const uploadResult = await blockBlobClient.upload(
    fileContentsAsString,
    fileContentsAsString.length,
    uploadOptions
  );

  if (uploadResult.errorCode) throw Error(uploadResult.errorCode);

  // Return client to continue with other operations
  return blockBlobClient;
}

تغيير طبقة الوصول إلى كائن ثنائي كبير الحجم بعد التحميل

لتغيير طبقة الوصول إلى كائن ثنائي كبير الحجم بعد تحميله إلى التخزين، استخدم setAccessTier. جنبا إلى جنب مع الطبقة، يمكنك تعيين أولوية إعادة ترطيب خاصية BlobSetTierOptions لإحضار الكائن الثنائي كبير الحجم للكتلة خارج حالة مؤرشفة. القيم المُحتملة هي High أو Standard.

async function main(blockBlobClient: BlockBlobClient): Promise<void> {
  const options: BlobGetPropertiesOptions = {};

  // Get current access tier
  const { errorCode, accessTier } = await blockBlobClient.getProperties(
    options
  );
  if (!errorCode) {
    console.log(`Current access tier: ${accessTier}`);
  }

  // 'Hot', 'Cool', or 'Archive'
  const newAccessTier = 'Cool';

  // Rehydrate priority: 'High' or 'Standard'
  const tierOptions: BlobSetTierOptions = {
    rehydratePriority: 'High'
  };

  const result: BlobSetTierResponse = await blockBlobClient.setAccessTier(
    newAccessTier,
    tierOptions
  );

  if (!result?.errorCode) {
    console.log(`Change to access was successful`);
  } else {
    console.log(result);
  }
}

نسخ كائن ثنائي كبير الحجم إلى طبقة وصول مختلفة

استخدم BlobClient.أسلوب beginCopyFromURL لنسخ كائن ثنائي كبير الحجم. لتغيير طبقة الوصول أثناء عملية النسخ، استخدم الخاصية BlobBeginCopyFromURLOptions tier وحدد طبقة وصول مختلفة عن الكائن الثنائي كبير الحجم المصدر.

async function copyBlobWithDifferentAccessTier(
  containerClient: ContainerClient
): Promise<void> {
  // create blob clients
  const sourceBlobClient: BlobClient = await containerClient.getBlobClient(
    originalBlob
  );
  const destinationBlobClient: BlobClient = await containerClient.getBlobClient(
    copyBlob
  );

  const copyOptions: BlobBeginCopyFromURLOptions = { tier: 'Hot' };

  // start copy, access tiers include `Hot`, `Cool`, `Archive`
  const copyPoller = await destinationBlobClient.beginCopyFromURL(
    sourceBlobClient.url,
    copyOptions
  );
  console.log('start copy from original to copy');

  // wait until done
  await copyPoller.pollUntilDone();
  console.log('copy finished');
}

استخدام دفعة لتغيير طبقة الوصول للعديد من الكائنات الثنائية كبيرة الحجم

تمثل الدفعة مجموعة مجمعة من العمليات على الكائنات الثنائية كبيرة الحجم، مثل حذف أو تعيين طبقة الوصول. تحتاج إلى تمرير بيانات الاعتماد الصحيحة لتنفيذ كل عملية بنجاح. في هذا المثال، يتم استخدام نفس بيانات الاعتماد لمجموعة من الكائنات الثنائية كبيرة الحجم في نفس الحاوية.

إنشاء BlobBatchClient. استخدم العميل لإنشاء دفعة باستخدام أسلوب createBatch(). عندما تكون الدفعة جاهزة، أرسل الدفعة للمعالجة. استخدم البنية التي تم إرجاعها للتحقق من نجاح عملية كل كائن ثنائي كبير الحجم.

async function batchChangeAccessTier(
  containerClient: ContainerClient
): Promise<void> {
  // Prep array
  const blockBlobCount = 3;
  const blockBlobClients: BlockBlobClient[] = new Array(blockBlobCount);

  // Create container and blobs in `Hot` tier
  await prepContainer(containerClient, blockBlobCount, blockBlobClients);

  // Blob batch client and batch
  const containerScopedBatchClient: BlobBatchClient =
    containerClient.getBlobBatchClient();
  const blobBatch: BlobBatch = containerScopedBatchClient.createBatch();

  // Assemble batch to set tier to `Cool` tier
  for (let i = 0; i < blockBlobCount; i++) {
    await blobBatch.setBlobAccessTier(
      blockBlobClients[i].url,
      sharedKeyCredential,
      'Cool',
      {}
    );
  }

  // Submit batch request and verify response
  const resp = await containerScopedBatchClient.submitBatch(blobBatch, {});

  if (resp.errorCode) throw Error(resp.errorCode);

  console.log(
    `Requested ${blockBlobCount}, batched ${resp.subResponses.length}, success ${resp.subResponsesSucceededCount}, failure ${resp.subResponsesFailedCount}`
  );

  // Examine each batch item
  for (let i = 0; i < blockBlobCount; i++) {
    // Check blob tier set properly
    const resp2 = await blockBlobClients[i].getProperties();

    if (resp2.errorCode) throw Error(resp2.errorCode);

    console.log(
      `[${i}] access tier ${resp2.accessTier}, status ${resp.subResponses[i].status}, message ${resp.subResponses[i].statusMessage}`
    );
  }
}

نماذج التعليمات البرمجية

الخطوات التالية