Prestaties afstemmen voor uploads en downloads met Java
Wanneer een toepassing gegevens overdraagt met behulp van de Azure Storage-clientbibliotheek voor Java, zijn er verschillende factoren die van invloed kunnen zijn op snelheid, geheugengebruik en zelfs het slagen of mislukken van de aanvraag. Om de prestaties en betrouwbaarheid voor gegevensoverdracht te maximaliseren, is het belangrijk om proactief te zijn bij het configureren van opties voor clientbibliotheekoverdracht op basis van de omgeving waarin uw app wordt uitgevoerd.
In dit artikel worden verschillende overwegingen beschreven voor het afstemmen van opties voor gegevensoverdracht. Wanneer de clientbibliotheek correct is afgestemd, kan de clientbibliotheek gegevens efficiënt distribueren over meerdere aanvragen, wat kan leiden tot een verbeterde werkingssnelheid, geheugengebruik en netwerkstabiliteit.
Prestaties afstemmen voor uploads
De opties voor het correct afstemmen van gegevensoverdracht zijn essentieel voor betrouwbare prestaties voor uploads. Opslagoverdrachten worden gepartitioneerd in verschillende subtransfers op basis van de waarden van deze argumenten. De maximale ondersteunde overdrachtsgrootte verschilt per bewerkings- en serviceversie. Controleer daarom de documentatie om de limieten te bepalen. Zie Schaaldoelen voor Blob-opslag voor meer informatie over de limieten voor de overdrachtsgrootte voor Blob Storage.
Overdrachtsopties instellen voor uploads
U kunt de waarden in ParallelTransferOptions configureren om de prestaties voor gegevensoverdrachtbewerkingen te verbeteren. De volgende waarden kunnen worden afgestemd op uploads op basis van de behoeften van uw app:
- maxSingleUploadSize: de maximale blobgrootte in bytes voor één aanvraagupload.
- blockSize: de maximale blokgrootte die moet worden overgedragen voor elke aanvraag.
- maxConcurrency: het maximum aantal parallelle aanvragen dat op een bepaald moment wordt uitgegeven als onderdeel van één parallelle overdracht.
Notitie
De clientbibliotheken gebruiken standaardwaarden voor elke optie voor gegevensoverdracht, indien niet opgegeven. Deze standaardwaarden werken doorgaans in een datacentrumomgeving, maar zijn waarschijnlijk niet geschikt voor thuisconsumentenomgevingen. Slecht afgestemde opties voor gegevensoverdracht kunnen leiden tot overmatig lange bewerkingen en zelfs time-outs voor aanvragen. Het is het beste om proactief te zijn bij het testen van deze waarden en het afstemmen ervan op basis van de behoeften van uw toepassing en omgeving.
maxSingleUploadSize
De maxSingleUploadSize
waarde is de maximale blobgrootte in bytes voor het uploaden van één aanvraag. Deze waarde kan worden ingesteld met behulp van de volgende methode:
Als de grootte van de gegevens kleiner is dan of gelijk is aan maxSingleUploadSize
, wordt de blob geüpload met één Put Blob-aanvraag . Als de blob groter is dan maxSingleUploadSize
of als de blobgrootte onbekend is, wordt de blob geüpload in segmenten met behulp van een reeks Put Block-aanroepen gevolgd door Put Block List.
Het is belangrijk te weten dat de waarde die u opgeeft blockSize
, niet de waarde beperkt die u definieert.maxSingleUploadSize
Het maxSingleUploadSize
argument definieert een afzonderlijke groottebeperking voor een aanvraag om de hele bewerking tegelijk uit te voeren, zonder suboverdrachten. Het is vaak het geval dat u minstens zo groot wilt maxSingleUploadSize
zijn als de waarde die u definieertblockSize
, als deze niet groter is. Afhankelijk van de grootte van de gegevensoverdracht kan deze methode beter presteren, omdat de overdracht wordt voltooid met één aanvraag en de overhead van meerdere aanvragen wordt vermeden.
Als u niet zeker weet welke waarde het beste is voor uw situatie, is een veilige optie om in te stellen maxSingleUploadSize
op dezelfde waarde die wordt gebruikt voor blockSize
.
blockSize
De blockSize
waarde is de maximale lengte van een overdracht in bytes bij het uploaden van een blok-blob in segmenten. Deze waarde kan worden ingesteld met behulp van de volgende methode:
De blockSize
waarde is de maximale lengte van een overdracht in bytes bij het uploaden van een blok-blob in segmenten. Zoals eerder vermeld, wordt deze waarde niet beperkt maxSingleUploadSize
, wat groter kan zijn dan blockSize
.
Om gegevens efficiënt te laten bewegen, bereiken de clientbibliotheken mogelijk niet altijd de blockSize
waarde voor elke overdracht. Afhankelijk van de bewerking kan de maximale ondersteunde waarde voor de overdrachtsgrootte variëren. Zie de grafiek in Schaaldoelen voor Blob Storage voor meer informatie over de overdrachtsgroottelimieten voor Blob Storage.
maxConcurrency
De maxConcurrency
waarde is het maximum aantal parallelle aanvragen dat op een bepaald moment wordt uitgegeven als onderdeel van één parallelle overdracht. Deze waarde kan worden ingesteld met behulp van de volgende methode:
Voorbeeld van code
Zorg ervoor dat u de volgende import
instructie hebt om te gebruiken ParallelTransferOptions
voor een upload:
import com.azure.storage.blob.models.*;
In het volgende codevoorbeeld ziet u hoe u waarden instelt voor ParallelTransferOptions en de opties opneemt als onderdeel van een BlobUploadFromFileOptions-exemplaar . Als u niet vanuit een bestand uploadt, kunt u vergelijkbare opties instellen met BlobParallelUploadOptions. De waarden in dit voorbeeld zijn niet bedoeld als aanbeveling. Als u deze waarden goed wilt afstemmen, moet u rekening houden met de specifieke behoeften van uw app.
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("<localFilePath>");
options.setParallelTransferOptions(parallelTransferOptions);
Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);
In dit voorbeeld stellen we het maximum aantal parallelle overdrachtswerkers in op 2 met behulp van de setMaxConcurrency
methode. We hebben ook ingesteld maxSingleUploadSize
op 8 MiB met behulp van de setMaxSingleUploadSizeLong
methode. Als de blob kleiner is dan 8 MiB, is slechts één aanvraag nodig om de uploadbewerking te voltooien. Als de blob groter is dan 8 MiB, wordt de blob geüpload in segmenten met een maximale segmentgrootte van 4 MiB, die we instellen met behulp van de setBlockSizeLong
methode.
Prestatieoverwegingen voor uploads
Tijdens het uploaden splitsen de Storage-clientbibliotheken een bepaalde uploadstroom op in meerdere subuploads op basis van de configuratieopties die zijn gedefinieerd door ParallelTransferOptions
. Elke subupload heeft een eigen toegewezen aanroep naar de REST-bewerking. Voor een BlobClient
object is deze bewerking Put Block. De Storage-clientbibliotheek beheert deze REST-bewerkingen parallel (afhankelijk van overdrachtsopties) om het volledige uploaden te voltooien.
Notitie
Blok-blobs hebben een maximumaantal blokken van 50.000 blokken. De maximale grootte van uw blok-blob is dan 50.000 keer block_size
.
Bufferen tijdens uploads
De Opslag REST-laag biedt geen ondersteuning voor het ophalen van een REST-uploadbewerking waar u was gebleven; afzonderlijke overdrachten worden voltooid of verloren gegaan. Om tolerantie voor streamuploads te garanderen, bufferen de Storage-clientbibliotheken gegevens voor elke afzonderlijke REST-aanroep voordat de upload wordt gestart. Naast netwerksnelheidsbeperkingen is dit buffergedrag een reden om rekening te houden met een kleinere waarde voor blockSize
, zelfs bij het uploaden in volgorde. Als u de waarde verlaagt, blockSize
wordt de maximale hoeveelheid gegevens die wordt gebufferd voor elke aanvraag en elke nieuwe poging van een mislukte aanvraag verkleint. Als u regelmatig time-outs ondervindt tijdens gegevensoverdrachten van een bepaalde grootte, vermindert u de waarde van het verminderen van blockSize
de buffertijd en kan dit leiden tot betere prestaties.
Prestaties afstemmen voor downloads
De opties voor het correct afstemmen van gegevensoverdracht zijn essentieel voor betrouwbare prestaties voor downloads. Opslagoverdrachten worden gepartitioneerd in verschillende subtransfers op basis van de waarden die zijn gedefinieerd in ParallelTransferOptions
.
Overdrachtsopties instellen voor downloads
De volgende waarden kunnen worden afgestemd op downloads op basis van de behoeften van uw app:
blockSize
: De maximale blokgrootte die moet worden overgedragen voor elke aanvraag. U kunt deze waarde instellen met behulp van de methode setBlockSizeLong .maxConcurrency
: Het maximum aantal parallelle aanvragen dat op een bepaald moment wordt uitgegeven als onderdeel van één parallelle overdracht. U kunt deze waarde instellen met behulp van de methode setMaxConcurrency .
Voorbeeld van code
Zorg ervoor dat u over de volgende import
instructie beschikt om te gebruiken ParallelTransferOptions
voor een download:
import com.azure.storage.common.*;
In het volgende codevoorbeeld ziet u hoe u waarden instelt voor ParallelTransferOptions en de opties opneemt als onderdeel van een BlobDownloadToFileOptions-exemplaar .
ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
.setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
.setMaxConcurrency(2);
BlobDownloadToFileOptions options = new BlobDownloadToFileOptions("<localFilePath>");
options.setParallelTransferOptions(parallelTransferOptions);
blobClient.downloadToFileWithResponse(options, null, null);
Prestatieoverwegingen voor downloads
Tijdens een download splitsen de Storage-clientbibliotheken een bepaalde downloadaanvraag in meerdere subdownloads op basis van de configuratieopties die zijn gedefinieerd door ParallelTransferOptions
. Elke subdownload heeft een eigen toegewezen aanroep naar de REST-bewerking. Afhankelijk van overdrachtsopties beheren de clientbibliotheken deze REST-bewerkingen parallel om de volledige download te voltooien.
Volgende stappen
- Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor Java. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Build your app.
- Zie Latentie in Blob Storage voor meer informatie over factoren die de prestaties voor Azure Storage-bewerkingen kunnen beïnvloeden.
- Zie de controlelijst prestaties en schaalbaarheid voor Blob-opslag voor blobopslag voor een lijst met ontwerpoverwegingen voor het optimaliseren van de prestaties voor apps.