在S3相容儲存下的同一個「目錄」中儲存1億個檔案?

在S3相容儲存下的同一個「目錄」中儲存1億個檔案?

我有超過 1 億個圖像檔案(書籍封面)作為單一「目錄」下的檔案平面清單:

/images/000000093e7d1825b346e9fc01387c7e449e1ed7
/images/000000574c67d7b8c5726f7cfd7bb1c5b3ae2ddf
/images/0000005ae12097d69208f6548bf600bd7d270a6f
...

很久以前,這些資料儲存在 Amazon S3 上,現在儲存在 Backblaze B2(與 S3 相容)上。

到目前為止,這工作得很好:

  • 儲存新檔案非常快;
  • 檢索現有文件非常快。

我正在再次遷移到 iDrive E2(也相容於 S3)。

我正在嘗試使用移動它們複製,但是在等待啟動 30 分鐘後rclone copy,我意識到 rclone 在收到整個文件列表之前不會開始傳輸文件。

問題是:

  • rclone ls對目錄的快速基準測試/images/告訴我,傳輸整個檔案清單將花費近 10 個小時
  • 傳輸過程中出現的任何問題(需要很多天)都會從零重新開始,迫使 rclone 再次下載整個文件列表
  • 列出文件花錢與B2

我嘗試配置 rclone 以僅複製一批文件:

  • rclone copy "backblaze:/images/0000*",有或沒有*,沒有找到任何文件
  • rclone copy "backblaze:/images/" --include "/0000*"似乎也下載了整個文件列表,並在客戶端上進行過濾

奇怪的是,看起來 rclone 從伺服器檢索給定「目錄」下的檔案清單沒有問題,例如/images/,但不能對前綴執行相同的操作,例如/images/0000.

我認為 S3 以及所有與 S3 相容的儲存都將檔案路徑儲存為平面結構,這/只是一個像其他角色一樣的角色,你可以輕鬆地列出任何前綴下的文件,無論是否以/

我錯了嗎?

我的下一個存儲(E2),我應該將文件儲存在子目錄下嗎,例如images/0/0/0/0/images/0/0/0/1等等,就像我們過去在傳統文件系統中儲存文件的美好時光一樣?

答案1

我意識到 rclone 在收到整個文件列表之前不會開始傳輸文件。

這告訴我,您的問題不在於儲存供應商,而是 rclone 本身。啟動清單流,然後在文件到達時對其進行分塊的解決方案比在操作之前需要整個文件列表的解決方案更合適。

我認為 S3 以及所有與 S3 相容的存儲,將文件路徑存儲為平面結構,

這絕對是 S3 的做法,當我第一次遇到它時,它打破了我的檔案伺服器管理大腦。鑑於這裡的問題似乎與元資料相關而不是文件佈局相關,因此這可能並不重要。

相關內容