تحميل كائن ثنائي كبير الحجم للكتلة باستخدام Java

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

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

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

لتحميل كائن ثنائي كبير الحجم للكتلة من دفق أو كائن ثنائي، استخدم الأسلوب التالي:

لتحميل كائن ثنائي كبير الحجم للكتلة من مسار ملف، استخدم الأسلوب التالي:

يمكن استدعاء كل من هذه الطرق باستخدام كائن BlobClient أو كائن BlockBlobClient .

تحميل كائن ثنائي كبير الحجم للكتلة من مسار ملف محلي

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

public void uploadBlobFromFile(BlobContainerClient blobContainerClient) {
    BlobClient blobClient = blobContainerClient.getBlobClient("sampleBlob.txt");

    try {
        blobClient.uploadFromFile("filepath/local-file.png");
    } catch (UncheckedIOException ex) {
        System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
    }
}

تحميل كائن ثنائي كبير الحجم للكتلة من دفق

يقوم المثال التالي بتحميل كائن ثنائي كبير الحجم للكتلة عن طريق إنشاء كائن ByteArrayInputStream ، ثم تحميل كائن الدفق هذا:

public void uploadBlobFromStream(BlobContainerClient blobContainerClient) {
    BlockBlobClient blockBlobClient = blobContainerClient.getBlobClient("sampleBlob.txt").getBlockBlobClient();
    String sampleData = "Sample data for blob";
    try (ByteArrayInputStream dataStream = new ByteArrayInputStream(sampleData.getBytes())) {
        blockBlobClient.upload(dataStream, sampleData.length());
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

تحميل كائن ثنائي كبير الحجم للكتلة من كائن BinaryData

يتم تحميل BinaryData المثال التالي إلى كائن ثنائي كبير الحجم للكتلة باستخدام كائن BlobClient :

public void uploadDataToBlob(BlobContainerClient blobContainerClient) {
    // Create a BlobClient object from BlobContainerClient
    BlobClient blobClient = blobContainerClient.getBlobClient("sampleBlob.txt");
    String sampleData = "Sample data for blob";
    blobClient.upload(BinaryData.fromString(sampleData));
}

تحميل كائن ثنائي كبير الحجم للكتلة مع خيارات التكوين

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

تحديد خيارات نقل البيانات عند التحميل

يمكنك تكوين القيم في ParallelTransferOptions لتحسين الأداء لعمليات نقل البيانات. يمكن ضبط القيم التالية للتحميلات استنادا إلى احتياجات تطبيقك:

  • blockSize: الحد الأقصى لحجم الكتلة المطلوب نقله لكل طلب. يمكنك تعيين هذه القيمة باستخدام أسلوب setBlockSizeLong .
  • maxSingleUploadSize: إذا كان حجم البيانات أقل من هذه القيمة أو مساويا لها، يتم تحميلها في وضع واحد بدلا من تقسيمها إلى مجموعات. إذا تم تحميل البيانات في لقطة واحدة، يتم تجاهل حجم الكتلة. يمكنك تعيين هذه القيمة باستخدام أسلوب setMaxSingleUploadSizeLong .
  • maxConcurrency: الحد الأقصى لعدد الطلبات المتوازية الصادرة في أي وقت كجزء من نقل مواز واحد. يمكنك تعيين هذه القيمة باستخدام أسلوب setMaxConcurrency .

تأكد من أن لديك التوجيه التالي import لاستخدامه ParallelTransferOptions في التحميل:

import com.azure.storage.blob.models.*;

يوضح مثال التعليمات البرمجية التالي كيفية تعيين قيم ParallelTransferOptions وتضمين الخيارات كجزء من مثيل BlobUploadFromFileOptions . لا يقصد بالقيم المقدمة في هذه العينة أن تكون توصية. لضبط هذه القيم بشكل صحيح، تحتاج إلى مراعاة الاحتياجات المحددة لتطبيقك.

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

    ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
            .setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
            .setMaxConcurrency(2)
            .setMaxSingleUploadSizeLong((long) 8 * 1024 * 1024); // 8 MiB max size for single request upload

    BlobUploadFromFileOptions options = new BlobUploadFromFileOptions(filePath.toString());
    options.setParallelTransferOptions(parallelTransferOptions);

    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.

تحميل كائن ثنائي كبير الحجم للكتلة باستخدام علامات الفهرس

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

يقوم المثال التالي بتحميل كائن ثنائي كبير الحجم للكتلة مع تعيين علامات الفهرس باستخدام BlobUploadFromFileOptions:

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

    Map<String, String> tags = new HashMap<String, String>();
    tags.put("Content", "image");
    tags.put("Date", "2022-01-01");

    Duration timeout = Duration.ofSeconds(10);

    BlobUploadFromFileOptions options = new BlobUploadFromFileOptions(filePath.toString());
    options.setTags(tags);

    try {
        // Create a new block blob, or update the content of an existing blob
        Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, timeout, null);
    } catch (UncheckedIOException ex) {
        System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
    }
}

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

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

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());
    }
}

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

لمعرفة المزيد حول مستويات الوصول، راجع نظرة عامة على مستويات الوصول.

تحميل كائن ثنائي كبير الحجم للكتلة عن طريق التقسيم المرحلي والتزم

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

public void uploadBlocks(BlobContainerClient blobContainerClient, Path filePath, int blockSize) throws IOException {
    String fileName = filePath.getFileName().toString();
    BlockBlobClient blobClient = blobContainerClient.getBlobClient(fileName).getBlockBlobClient();

    FileInputStream fileStream = new FileInputStream(filePath.toString());
    List<String> blockIDArrayList = new ArrayList<>();
    byte[] buffer = new byte[blockSize];
    int bytesRead;

    while ((bytesRead = fileStream.read(buffer, 0, blockSize)) != -1) {

        try (ByteArrayInputStream stream = new ByteArrayInputStream(buffer)) {
            String blockID = Base64.getEncoder().encodeToString(UUID.randomUUID().toString().getBytes(StandardCharsets.UTF_8));

            blockIDArrayList.add(blockID);
            blobClient.stageBlock(blockID, stream, buffer.length);
        }
    }

    blobClient.commitBlockList(blockIDArrayList);

    fileStream.close();
}

الموارد

لمعرفة المزيد حول تحميل الكائنات الثنائية كبيرة الحجم باستخدام مكتبة عميل Azure Blob Storage ل Java، راجع الموارد التالية.

عمليات واجهة برمجة تطبيقات REST

يحتوي Azure SDK ل Java على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات REST API من خلال نماذج Java المألوفة. تستخدم أساليب مكتبة العميل لتحميل الكائنات الثنائية كبيرة الحجم عمليات واجهة برمجة تطبيقات REST التالية:

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

موارد مكتبة العميل

(راجع أيضًا )