有效處理2+百萬個文件

有效處理2+百萬個文件

我有一個基於檔案的資料庫,大約有 2M 個檔案儲存在 3 級子目錄中。

2/2/6253
2/2/6252
...

檔案大小從 30 位元組到 60 KB 不等。整個資料庫是唯讀的。 DB 大約有 125 GB 大。

添加:所有檔案均由 zlib (python) 壓縮

我想將其作為一個文件來處理,其中包含文件系統。哪個檔案系統是我的最佳選擇?

目前我使用以下腳本:

dd if=/dev/zero of=/my_file.iso bs=1024K count=60000
mkfs.ext4 -f /my_file.iso
mount -o loop /my_file.iso /mnt/

答案1

您可能只想使用 XFS。

它完全能夠滿足您的要求,並且可以完成工作。

沒有理由使用較少使用的檔案系統來使這一點變得複雜,這可能會帶來其他權衡。

請參閱:子目錄的數量如何影響 Linux 上的驅動器讀/寫效能?高目錄與檔案比率對 XFS 的影響

如果您想要更深奧的東西,頂部帶有檔案系統的 ZFS zvols 可以提供一個有趣的替代方案(出於壓縮、完整性和可移植性目的)。

看這裡:與 ext4 結合的透明壓縮檔案系統

答案2

看到小檔案的數量,我會考慮使用SquashFS。特別是如果您有足夠強大的 CPU(意味著沒有 Pentium III 或 1GHz ARM)。

根據儲存資料的類型,SquashFS 可以大幅減少其大小,從而減少讀取資料時的 I/O。唯一的缺點是讀取時的 CPU 使用率。另一方面,任何現代 CPU 的解壓縮速度都遠遠超過 HDD,甚至可能超過 SSD。

另一個優點 - 您可以節省空間/頻寬和/或傳輸後解壓縮所花費的時間。

一些基準測試將其與 ISO 和其他類似方法進行比較。與每個基準一樣,要持保留態度,最好是偽造自己的基準。 ;-)

編輯:根據具體情況(我不敢在這裡猜測)不帶壓縮(mksquashfs -noD)的 SquashFS 可能優於 ext4,因為讀取代碼應該更簡單並且針對只讀操作進行了優化。但這實際上取決於您在用例中進行基準測試。另一個優點是 SquashFS 映像僅比您的資料大一點。使用 Ext4,您必須始終建立更大的循環設備。當然,缺點是當您需要更改數據時,它相當不舒服。使用 ext4 就容易多了。

答案3

如果它是唯讀的,為什麼不使用 ISO 檔案呢?您可以使用genisoimagemkisofs

如果你想壓縮整個文件,你還可以使用squashfs另一個具有非常高壓縮比的唯讀檔案系統。

答案4

我不確定這是否符合您的目的,但是您是否考慮過tar合併多個文件?這可能會減少檔案系統上的壓力和空間要求,並且您的資料庫應用程式可以使用tar周圍的許多庫之一讀取特定檔案的資料。

根據您的訪問模式,這甚至可能會提高效能。

相關內容