Daha hızlı bir alternatif ratarmount yazdım , "benim için çalışıyor", çünkü bu sorun beni rahatsız ediyordu .
Bu şekilde kullanabilirsiniz:
pip3 install --user ratarmount
ratarmount my-huge-tar.tar mount-folder
ls -la mount-folder # will show the contents of the tar top-level
İşiniz bittiğinde herhangi bir FUSE montajı gibi bağlantısını kesebilirsiniz:
fusermount -u mount-folder
Neden arşivden daha hızlı?
Neyi ölçtüğünüze bağlı.
Burada, basit bir cat <file-in-tar>
komut ve basit bir komut için erişim sürelerinin yanı sıra, bellek ayak izi ve ilk montaj için gereken zamanın bir karşılaştırması yer almaktadır find
.
Her 1k dosyasını içeren klasörler oluşturuldu ve klasör sayısı değişti.
Sol alt grafik, cat <file>
rastgele seçilen 10 dosya için minimum ve maksimum ölçülen süreleri gösteren hata çubuklarını gösterir .
Dosya arama süresi
Katil karşılaştırması cat <file>
bitirmek için gereken süredir . Bazı nedenlerden dolayı, bu ratarmountta sabit süre kalırken TAR dosya boyutu (dosya başına yaklaşık bayt x dosya sayısı) ile doğrusal olarak ölçeklenir. Bu, archivemount'un aramayı hiç desteklemediğini bile gösteriyor.
Sıkıştırılmış TAR dosyaları için bu özellikle dikkat çekicidir.
cat <file>
.tar.bz2 dosyasının tamamı iki kattan daha uzun sürüyor! Örneğin, 10k boş (!) Dosyaları içeren TAR arşivleme sayısı ile bağlanmak için 2,9s alır, ancak erişilen dosyaya bağlı olarak, erişim 3ms ile cat
5s arasında sürer. Bu sürenin dosyanın TAR içindeki konumuna bağlı olduğu görülüyor. TAR sonunda bulunan dosyaların aranması daha uzun sürer; "arama" öğesinin taklit edildiğini ve dosya okunmadan önce TAR'deki tüm içeriğin bulunduğunu belirtir.
Dosya içeriğini almanın, TAR'ın tamamını takmak beklenmedik iki kattan fazla zaman alabilir. En azından, montaj ile aynı sürede bitmelidir. Bir açıklama, dosyanın taklit edilerek bir kereden fazla, belki de üç kez aranmasıdır.
Ratarmount, gerçek aramayı desteklediği için bir dosyayı almak her zaman aynı miktarda zaman alır. Bzip2 sıkıştırılmış TAR'ler için, adresleri dizin dosyasında da saklanan bzip2 bloğunu bile arar. Teorik olarak, dosya sayısıyla ölçeklendirilmesi gereken tek bölüm dizindeki aramadır ve dosya yoluna ve adına göre sıralandığından O (log (n)) ile ölçeklendirilmelidir.
Bellek alanı
Genel olarak, TAR içinde 20 bin'den fazla dosyanız varsa, dizin oluşturulduğu gibi diske yazıldığından ve sistemimde yaklaşık 30 MB'lık sabit bir bellek alanına sahip olduğundan ratarmount'un bellek alanı daha küçük olacaktır.
Küçük bir istisna, gzip kod çözücü arka ucudur, gzip büyüdükçe bazı nedenlerden dolayı daha fazla bellek gerektirir. Bu bellek yükü, TAR içinde arama yapmak için gerekli olan dizin olabilir, ancak bu arka ucu yazmadığım için daha fazla araştırmaya ihtiyaç vardır.
Aksine, archivemount, örneğin, 2M dosyaları için 4 GB olan tüm dizini TAR monte edildiği sürece tamamen bellekte tutar.
Montaj süresi
En sevdiğim özellik, daha sonraki bir denemede belirgin bir şekilde gecikmeden TAR'ı monte edebilmek için ratarmount. Bunun nedeni, dosya adlarını meta verilere ve TAR içindeki konumla eşleyen dizinin, TAR dosyasının yanında oluşturulan bir dizin dosyasına yazılmasıdır.
Montaj için gereken süre, bir miktar garip davranır. Yaklaşık 20 bin dosyadan başlayarak, dosya sayısına göre doğrusal olarak değil, karesel olarak ölçeklenmeye başlar. Bu, kabaca 4M dosyalardan başlayarak, daha küçük TAR dosyaları için 10 kat daha yavaş olmasına rağmen, ratarmount'un archivemount'tan çok daha hızlı olmaya başladığı anlamına gelir! Daha sonra, daha küçük dosyalar için, katranı (ilk kez) monte etmenin 1s mi yoksa 0.1s mi süreceği önemli değildir.
Bz2 sıkıştırılmış dosyalar için montaj süreleri her zaman en karşılaştırılabilir. Bu çok olasıdır çünkü bz2 kod çözücüsünün hızına bağlıdır. Ratarmount burada yaklaşık 2 kat daha yavaştır. Yakın gelecekte bz2 kod çözücüyü paralelleştirerek ratarmount'u açık kazanan yapmayı umuyorum, bu da 8 yaşındaki sistemim için bile 4x hız sağlayabilir.
Meta veri alma zamanı
find
TAR'ın içindeki tüm dosyaları listelerken (bul ayrıca her dosya için stat çağrısında bulunuyor gibi görünüyor !?), ratarmount test edilen tüm durumlar için archivemount değerinden 10 kat daha yavaştır. Gelecekte bunu iyileştirmeyi umuyorum. Ancak şu anda, saf bir C programı yerine Python ve SQLite kullanımı nedeniyle bir tasarım problemine benziyor.