簡體   English   中英

將文件子集從一個容器復制到另一個容器的有效方法是什么?

[英]What is an efficient way to copy a subset of files from one container to another?

我在一個容器中有數百萬個文件,我需要將 ~100k 復制到同一存儲帳戶中的另一個容器。 最有效的方法是什么?

我努力了:

  1. Python API -- 使用 BlobServiceClient 和相關類,我為源和目標創建了一個 BlobClient,並使用new_blob.start_copy_from_url(source_blob.url)開始復制。 這以每秒大約 7 個文件的速度運行。
  2. azcopy(每行一個文件)——基本上是一個批處理腳本,每個文件都有一行azcopy copy <source w/ SAS> <destination w/ SAS> 由於 azcopy 的開銷,它以每秒大約 0.5 個文件的速度運行。
  3. azcopy(每行 1000 個文件)——另一個類似上面的批處理腳本,除了我使用--include-path參數一次指定一堆以分號分隔的文件。 (這個數字是任意的,但我選擇了 1000,因為我擔心命令過載。即使 1000 個文件也會產生一個 84k 字符的命令。)這里額外警告:我不能用這種方法重命名文件,這是大約 25% 所必需的對將從目標容器下載的系統的字符限制。 這大約以每秒 3.5 個文件的速度運行。

肯定有更好的方法來做到這一點,可能是使用另一個我沒有嘗試過的 Azure 工具。 或者可能通過標記我要復制的文件然后使用該標記復制文件,但我找不到 arguments 來執行此操作。

請檢查以下參考資料:

1. AZCOPY最適合在同一存儲或其他存儲帳戶中復制 blob。我們可以通過為 AZCopy 指定“/SyncCopy”參數來強制同步復制,以確保復制操作將獲得一致的速度。 azcopy 同步 | 微軟文檔。

但請注意,AzCopy 通過將 blob 下載到本地 memory 然后上傳到 Blob 存儲目標來執行同步復制。 因此,性能也將取決於運行 AZCopy 的位置與 Azure DC 位置之間的網絡條件。 另請注意,與異步復制相比,/ SyncCopy可能會產生額外的出口成本,推薦的方法是在與源存儲帳戶位於同一區域的 Azure VM 中將此同步選項與 azcopy 結合使用,以避免出口成本。 選擇復制 blob 的工具和策略 - 學習 | 微軟文檔

2. StartCopyAsync是您可以嘗試在存儲帳戶中進行復制的方法之一。

參考資料: 1. .net - 在不使用 azcopy 的情況下跨 Azure 容器復制文件 - 堆棧溢出2. 在容器之間快速復制 Azure Blob (markheath.net)

3.如果有數百萬個文件,您可以考慮Azure data factory ,但也要注意它可能很昂貴並且可能會出現很少的超時,但對於重復的工作來說可能是值得的。

參考資料: 1. Copy millions of files (andrewconnell.com) , GitHub(microsoft docs) 2. File Transfer between container to another container - Microsoft Q&A

4.同時檢查並嘗試將Azure storage explorer 復制 blob 容器到另一個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM