Prestandajustering för uppladdningar och nedladdningar med Java
När ett program överför data med hjälp av Azure Storage-klientbiblioteket för Java finns det flera faktorer som kan påverka hastighet, minnesanvändning och till och med lyckade eller misslyckade begäranden. För att maximera prestanda och tillförlitlighet för dataöverföringar är det viktigt att vara proaktiv när det gäller att konfigurera överföringsalternativ för klientbibliotek baserat på den miljö som appen körs i.
Den här artikeln går igenom flera överväganden för att justera alternativ för dataöverföring. När klientbiblioteket är korrekt justerat kan det effektivt distribuera data över flera begäranden, vilket kan leda till förbättrad drifthastighet, minnesanvändning och nätverksstabilitet.
Prestandajustering för uppladdningar
Korrekt justering av dataöverföringsalternativ är nyckeln till tillförlitlig prestanda för uppladdningar. Lagringsöverföringar partitioneras i flera undertransfers baserat på värdena för dessa argument. Den maximala överföringsstorleken som stöds varierar beroende på åtgärd och tjänstversion, så se till att kontrollera dokumentationen för att fastställa gränserna. Mer information om överföringsstorleksgränser för Blob Storage finns i Skalningsmål för Blob Storage.
Ange överföringsalternativ för uppladdningar
Du kan konfigurera värdena i ParallelTransferOptions för att förbättra prestanda för dataöverföringsåtgärder. Följande värden kan justeras för uppladdningar baserat på appens behov:
- maxSingleUploadSize: Den maximala blobstorleken i byte för en enda begärandeuppladdning.
- blockSize: Den maximala blockstorleken som ska överföras för varje begäran.
- maxConcurrency: Det maximala antalet parallella begäranden som utfärdas vid en viss tidpunkt som en del av en enda parallell överföring.
Kommentar
Klientbiblioteken använder standardvärden för varje alternativ för dataöverföring, om de inte anges. Dessa standardvärden fungerar vanligtvis i en datacentermiljö, men är troligen inte lämpliga för hemkonsumentmiljöer. Dåligt anpassade alternativ för dataöverföring kan resultera i överdrivet långa åtgärder och till och med tidsgränser för begäranden. Det är bäst att vara proaktiv när det gäller att testa dessa värden och justera dem baserat på behoven i ditt program och din miljö.
maxSingleUploadSize
Värdet maxSingleUploadSize
är den maximala blobstorleken i byte för en enda begärandeuppladdning. Det här värdet kan anges med hjälp av följande metod:
Om storleken på data är mindre än eller lika maxSingleUploadSize
med laddas blobben upp med en enda Put Blob-begäran . Om blobstorleken är större än maxSingleUploadSize
, eller om blobstorleken är okänd, laddas blobben upp i segment med hjälp av en serie Put Block-anrop följt av Placera blockeringslista.
Det är viktigt att observera att det värde du anger för blockSize
inte begränsar det värde som du definierar för maxSingleUploadSize
. Argumentet maxSingleUploadSize
definierar en separat storleksbegränsning för en begäran om att utföra hela åtgärden samtidigt, utan undertransfers. Det är ofta så att du vill maxSingleUploadSize
vara minst lika stor som värdet du definierar för blockSize
, om inte större. Beroende på storleken på dataöverföringen kan den här metoden vara mer högpresterande eftersom överföringen slutförs med en enda begäran och undviker omkostnaderna för flera begäranden.
Om du är osäker på vilket värde som är bäst för din situation är ett säkert alternativ att ange maxSingleUploadSize
samma värde som används för blockSize
.
blockSize
Värdet blockSize
är den maximala längden på en överföring i byte när du laddar upp en blockblob i segment. Det här värdet kan anges med hjälp av följande metod:
Värdet blockSize
är den maximala längden på en överföring i byte när du laddar upp en blockblob i segment. Som tidigare nämnts begränsar inte det här värdet , som kan vara större än blockSize
. maxSingleUploadSize
För att hålla data i rörelse effektivt kanske klientbiblioteken inte alltid når blockSize
värdet för varje överföring. Beroende på åtgärden kan det maximala värdet för överföringsstorleken variera. Mer information om gränserna för överföringsstorlek för Blob Storage finns i diagrammet i Skala mål för Blob Storage.
maxConcurrency
Värdet maxConcurrency
är det maximala antalet parallella begäranden som utfärdas vid en viss tidpunkt som en del av en enda parallell överföring. Det här värdet kan anges med hjälp av följande metod:
Kodexempel
Kontrollera att du har följande import
direktiv att använda ParallelTransferOptions
för en uppladdning:
import com.azure.storage.blob.models.*;
I följande kodexempel visas hur du anger värden för ParallelTransferOptions och inkluderar alternativen som en del av en BlobUploadFromFileOptions-instans . Om du inte laddar upp från en fil kan du ange liknande alternativ med BlobParallelUploadOptions. De värden som anges i det här exemplet är inte avsedda att vara en rekommendation. Om du vill justera dessa värden korrekt måste du ta hänsyn till appens specifika behov.
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);
I det här exemplet anger vi det maximala antalet parallella överföringsarbetare till 2 med hjälp av setMaxConcurrency
metoden. Vi anger maxSingleUploadSize
även till 8 MiB med hjälp av setMaxSingleUploadSizeLong
metoden . Om blobstorleken är mindre än 8 MiB krävs bara en enda begäran för att slutföra uppladdningen. Om blobstorleken är större än 8 MiB laddas bloben upp i segment med en maximal segmentstorlek på 4 MiB, som vi anger med hjälp av setBlockSizeLong
metoden.
Prestandaöverväganden för uppladdningar
Under en uppladdning delar Storage-klientbiblioteken upp en viss uppladdningsström i flera underuppdateringar baserat på de konfigurationsalternativ som definieras av ParallelTransferOptions
. Varje underuppladdning har ett eget dedikerat anrop till REST-åtgärden. För ett BlobClient
objekt är den här åtgärden Placera block. Storage-klientbiblioteket hanterar dessa REST-åtgärder parallellt (beroende på överföringsalternativ) för att slutföra den fullständiga uppladdningen.
Kommentar
Blockblobar har ett maximalt blockantal på 50 000 block. Den maximala storleken på blockbloben är då 50 000 gånger block_size
.
Buffring under uppladdningar
Storage REST-lagret har inte stöd för att hämta en REST-uppladdningsåtgärd där du slutade. enskilda överföringar antingen slutförs eller förloras. För att säkerställa återhämtning för dataströmuppladdningar buffrar Storage-klientbiblioteken data för varje enskilt REST-anrop innan uppladdningen startas. Förutom begränsningar i nätverkshastigheten är det här buffringsbeteendet en anledning att överväga ett mindre värde för blockSize
, även när du laddar upp i sekvens. Om du minskar värdet för blockSize
minskar den maximala mängden data som buffrats för varje begäran och varje nytt försök av en misslyckad begäran. Om du har frekventa timeouter under dataöverföringar av en viss storlek minskar en minskning av blockSize
värdet för buffringstiden och kan resultera i bättre prestanda.
Prestandajustering för nedladdningar
Korrekt justering av dataöverföringsalternativ är nyckeln till tillförlitlig prestanda för nedladdningar. Lagringsöverföringar partitioneras i flera undertransfers baserat på de värden som definieras i ParallelTransferOptions
.
Ange överföringsalternativ för nedladdningar
Följande värden kan justeras för nedladdningar baserat på appens behov:
blockSize
: Den maximala blockstorlek som ska överföras för varje begäran. Du kan ange det här värdet med hjälp av metoden setBlockSizeLong .maxConcurrency
: Det maximala antalet parallella begäranden som utfärdas vid en viss tidpunkt som en del av en enda parallell överföring. Du kan ange det här värdet med metoden setMaxConcurrency .
Kodexempel
Kontrollera att du har följande import
direktiv att använda ParallelTransferOptions
för en nedladdning:
import com.azure.storage.common.*;
I följande kodexempel visas hur du anger värden för ParallelTransferOptions och inkluderar alternativen som en del av en BlobDownloadToFileOptions-instans .
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);
Prestandaöverväganden för nedladdningar
Under en nedladdning delar Storage-klientbiblioteken upp en viss nedladdningsbegäran i flera undernedladdningar baserat på konfigurationsalternativen som definierats av ParallelTransferOptions
. Varje underdelast har ett eget dedikerat anrop till REST-åtgärden. Beroende på överföringsalternativ hanterar klientbiblioteken dessa REST-åtgärder parallellt för att slutföra den fullständiga nedladdningen.
Nästa steg
- Den här artikeln är en del av utvecklarguiden för Blob Storage för Java. Se den fullständiga listan över utvecklarguideartiklar i Skapa din app.
- Mer information om faktorer som kan påverka prestanda för Azure Storage-åtgärder finns i Svarstid i Blob Storage.
- En lista över designöverväganden för att optimera prestanda för appar med bloblagring finns i Checklista för prestanda och skalbarhet för Blob Storage.