1

我使用 Azcopy Java Sdk 将文件从本地传输到 blob,与 cli 相比,它需要更多时间(几乎两倍)。对于 1GB 文件,cli 需要 8 秒,并发请求计数为 1 的 SDK 需要 40 秒和 20 秒。超过 2 秒,我没有看到传输时间有任何改善。有什么方法可以提高使用 sdk 的性能。请找到我正在使用的代码片段。

CloudStorageAccount storageAccount = null;
CloudBlobContainer container = null;
CloudBlockBlob blob = null;
BlobRequestOptions blobRequestOptions = new BlobRequestOptions();
blobRequestOptions.setConcurrentRequestCount(6);
storageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
container = blobClient.getContainerReference("content");
blob = container
   .getBlockBlobReference(sourceFile.getName());
blob.uploadFromFile(sourceFile.getAbsolutePath(), null, blobRequestOptions, null);  

Edit1:我正在尝试使用下面的代码上传,它需要 20 秒,而 azcopy cli 需要 8 秒

  blob.setStreamWriteSizeInBytes(100 * 1024 * 1024);
4

1 回答 1

0

Azycopy 和 Azure 存储 SDK 执行相同的任务,但是 AZcopy 比 SDK 有一些优势。

复制:

默认情况下,AzCopy 在两个存储终结点之间异步复制数据。因此,复制操作使用没有 SLA 的备用带宽容量在后台运行,就 blob 的复制速度而言,AzCopy 会定期检查复制状态,直到复制完成或失败。

/SyncCopy选项可确保复制操作获得一致的速度。AzCopy 通过将要复制的 Blob 从指定源下载到本地内存,然后将它们上传到 Blob 存储目标来执行同步复制。

Java SDK

我们 Java 库中的所有 blob 下载 API 都是同步的。在下载完成之前,该方法不会终止。一般来说,Java 6(我们使用的版本)不支持异步方法。希望这可以帮助!

快速上传许多 blob

要快速上传许多 Blob,请并行上传 Blob。这比使用并行块上传一次上传单个 blob 更快,因为它将上传分散到存储服务的多个分区。单个 blob 仅支持 60 MB/秒(约 480 Mbps)的吞吐量。在撰写本文时,美国的 LRS 帐户支持高达 20 Gbps 的入口,这远远超过单个 blob 支持的吞吐量。AzCopy 默认情况下并行执行上传,建议用于此方案。

资料来源:

https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy https://github.com/Azure/azure-storage-java/issues/95 https://docs。 microsoft.com/en-us/azure/storage/common/storage-performance-checklist#subheading22

于 2018-04-03T16:08:18.617 回答