Delen via


Prestaties afstemmen voor uploads en downloads met JavaScript

Wanneer een toepassing gegevens overdraagt met behulp van de Azure Storage-clientbibliotheek voor JavaScript, 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 eigenschappen configureren in BlockBlobParallelUploadOptions om de prestaties voor gegevensoverdrachtbewerkingen te verbeteren. De volgende tabel bevat de eigenschappen die u kunt configureren, samen met een beschrijving:

Eigenschappen Beschrijving
blockSize De maximale blokgrootte die moet worden overgedragen voor elke aanvraag als onderdeel van een uploadbewerking. Zie blockSize voor meer informatie.
maxSingleShotSize Als de grootte van de gegevens kleiner is dan of gelijk is aan deze waarde, wordt deze geüpload in één put in plaats van opgesplitst in segmenten. Als de gegevens in één opname worden geüpload, wordt de blokgrootte genegeerd. De standaardwaarde is 256 MB. Als u deze eigenschap aanpast, moet u een waarde van minder dan of gelijk aan 256 MB gebruiken. Zie maxSingleShotSize voor meer informatie.
concurrency Het maximum aantal parallelle aanvragen dat op elk gewenst 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.

maxSingleShotSize

De maxSingleShotSize waarde is de maximale blobgrootte in bytes voor het uploaden van één aanvraag.

Als de grootte van de gegevens kleiner is dan of gelijk is aan maxSingleShotSize, wordt de blob geüpload met één Put Blob-aanvraag . Als de blob groter is dan maxSingleShotSize, 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.maxSingleShotSize Het maxSingleShotSize 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 maxSingleShotSize 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 maxSingleShotSize 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.

Zoals eerder vermeld, wordt deze waarde niet beperkt maxSingleShotSize, 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.

Voorbeeld van code

In het volgende codevoorbeeld ziet u hoe u waarden instelt voor BlockBlobParallelUploadOptions en de opties opneemt als onderdeel van een aanroep van de uploadmethode. De waarden in de voorbeelden zijn niet bedoeld als aanbeveling. Als u deze waarden goed wilt afstemmen, moet u rekening houden met de specifieke behoeften van uw app.

// Specify data transfer options
const uploadOptions = {
  blockSize: 4 * 1024 * 1024, // 4 MiB max block size
  concurrency: 2, // maximum number of parallel transfer workers
  maxSingleShotSize: 8 * 1024 * 1024, // 8 MiB initial transfer size
} 

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

// Upload blob with transfer options
await blockBlobClient.uploadFile(localFilePath, uploadOptions);

In dit voorbeeld stellen we het maximum aantal parallelle overdrachtsmedewerkers in op 2 met behulp van de concurrency eigenschap. We hebben ook ingesteld maxSingleShotSize op 8 MiB. 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 in de blockSize eigenschap definiëren.

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 BlockBlobParallelUploadOptions. Elke subupload heeft een eigen toegewezen aanroep naar de REST-bewerking. In dit voorbeeld is de 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

Opties voor het afstemmen van gegevensoverdracht voor downloads zijn alleen beschikbaar wanneer u de downloadToBuffer-methode gebruikt. Met deze methode wordt een blob parallel gedownload naar een buffer op basis van de waarden die zijn gedefinieerd in BlobDownloadToBufferOptions. Andere downloadmethoden bieden geen ondersteuning voor het afstemmen van opties voor gegevensoverdracht.

Overdrachtsopties instellen voor downloads

De volgende waarden kunnen worden afgestemd op downloads wanneer u de downloadToBuffer methode gebruikt:

  • blockSize: de maximale blokgrootte die moet worden overgedragen voor elke aanvraag.
  • gelijktijdigheid: het maximum aantal parallelle aanvragen dat op een bepaald moment wordt uitgegeven als onderdeel van één parallelle overdracht.

Prestatieoverwegingen voor downloads

Tijdens een download met behulp van downloadToBufferde Storage-clientbibliotheken worden een bepaalde downloadaanvraag gesplitst in meerdere subdownloads op basis van de configuratieopties die zijn gedefinieerd door BlobDownloadToBufferOptions. 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.

Voorbeeld van code

In het volgende codevoorbeeld ziet u hoe u waarden instelt voor BlobDownloadToBufferOptions en de opties opneemt als onderdeel van een aanroep van de downloadToBuffer-methode . De waarden in de voorbeelden zijn niet bedoeld als aanbeveling. Als u deze waarden goed wilt afstemmen, moet u rekening houden met de specifieke behoeften van uw app.

// Specify data transfer options
    const downloadToBufferOptions = {
        blockSize: 4 * 1024 * 1024, // 4 MiB max block size
        concurrency: 2, // maximum number of parallel transfer workers
    }

    // Download data to buffer
    const result = await client.downloadToBuffer(offset, count, downloadToBufferOptions);