Dizin başına dosya sayısı


19

Ben yaklaşık 100000 küçük dosyaları (her dosya 1-3 satır, her dosya bir metin dosyası) ile bir dizin var. Boyut olarak dizin çok büyük değil (<2GB). Bu veriler profesyonel olarak yönetilen bir NFS sunucusunda yaşar. Sunucu Linux çalıştırıyor. Dosya sisteminin ext3 olduğunu düşünüyorum, ama emin değilim. Ayrıca, sunucuya kök erişimim yok.

Bu dosyalar üzerinde kontrol sahibi olmadığım büyük ölçekli bilimsel bir deneyin çıktısıdır. Ancak sonuçları analiz etmem gerekiyor.

Bu dizindeki herhangi bir G / Ç işlemi / işlemi çok, çok yavaştır. Bir dosyayı açmak (python'da fopen), açık bir dosyadan okumak, bir dosyayı kapatmak çok yavaştır. Bash ls, du, vb.

Soru:

Linux'taki bir dizindeki maksimum dosya sayısı, işleme, fopen, okuma, vb. Yapmak için pratik olacak şekilde nedir? Cevabın birçok şeye bağlı olduğunu anlıyorum: fs tipi, çekirdek sürümü, sunucu sürümü, donanım, vs. Mümkünse sadece bir kural istiyorum.


6
Doğrudan sorunuz Giles tarafından iyi yanıtlandı, ancak dosya adlarını küçük veri parçaları için anahtar olarak kullandığınızda, Linux dosya sistemleri veritabanları için zayıf yedekler yapıyor. Üretimi kontrol etmezsiniz, ancak verileri analiz için daha uygun bir forma sonra işleyebilirsiniz; bunu yapmazsanız, her adımda dosya sistemi yükünü ödersiniz. Ek yükü azaltabilirsiniz, ancak ortadan kaldırırsanız en mutlu olabilirsiniz.
msw

Yanıtlar:


22

Tahmin edeceğiniz gibi, çoğunlukla dosya sistemi türü ve seçenekleri ve bir ölçüde çekirdek sürümü gibi birçok şeye bağlıdır. Ext2 / ext3 / ext4 serisinde, dir_indexseçenek göründüğünde (ext3'ün ilk yayınlanmasından bir süre sonra) büyük bir gelişme oldu : dizinleri doğrusal listeler (doğrusal zaman erişimi) yerine arama ağaçları (logaritmik zaman erişimi) olarak saklar ). Bu, NFS üzerinden görebileceğiniz bir şey değil, ancak yöneticilerle bazı temaslarınız varsa, onları çalıştırmalarını isteyebilirsiniz tune2fs -l /dev/something |grep features(belki de onları yükseltmeye ikna edebilirsiniz?). Yalnızca dosya sayısı önemlidir, boyutları değil.

Bununla birlikte dir_index, 100000 büyük hissediyor. İdeal olarak, bir dizi alt dizin eklemek için dosyaları oluşturan programın yazarlarını edinin. Hiçbir performans düşüşü için, ext2 veya ext3 için dizin başına yaklaşık 1000 dosya dir_indexve dir_indexreiserfs ile 20000 sınırını öneriyorum . Dosyaların nasıl oluşturulacağını denetleyemiyorsanız, başka bir şey yapmadan önce dosyaları ayrı dizinlere taşıyın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.