Hizmet olarak rasgele bir koleksiyon oluşturmak ve sunmak amacıyla milyonlarca metin dosyasını bir Linux dosya sisteminde depolamak istiyoruz. Bir anahtar / değer veritabanı gibi diğer çözümleri denedik, ancak eşzamanlılık ve paralellik gereksinimlerimiz yerel dosya sistemini kullanmayı en iyi seçim haline getiriyor.
En basit yol, tüm dosyaları bir klasörde saklamaktır:
$ ls text_files/
1.txt
2.txt
3.txt
bu da bir klasördeki dosya sayısında sınırlama bulunmayan bir EXT4 dosya sisteminde mümkün olmalıdır .
İki FS işlemi şöyle olacaktır:
- Web kazımaktan metin dosyası yazın (klasördeki dosya sayısından etkilenmemelidir).
- Dosya adları listesine göre seçilen dosyaları sıkıştırın.
Sorum şu ki, bir klasörde on milyona kadar dosya depolamak, yukarıdaki işlemlerin performansını veya genel sistem performansını etkileyecek, dosyaların yaşamak için bir alt klasör ağacı yapmaktan farklı mı?
ls -l
veya başka bir şey stat
dizindeki her düğüm (örn s bash
yapay hızlı olacaktır globbing / sekme tamamlama) bazı aşınma ve yıpranma sonrası (bazı dosyaları silin, yeni dosyaları yazın). ext4 bunu XFS'den daha iyi yapabilir, çünkü XFS dinamik olarak indotalar ve veriler için alan ayırır, böylece inotlarla daha dağınık olabileceğini düşünüyorum. (Ama bu çok az detaylı bilgiye dayanan saf bir tahmin; ext4'i neredeyse hiç kullanmadım). abc/def/
Alt dizinlerle git .
ZipOutputStream
oluşturan bir Java sunucu uygulaması bile herhangi bir ücretsiz Linux yerel dosya sistemi hakkında yenecekti - IBM'in GPFS'si için ödeme yapmak istediğinizden şüpheliyim. JDBC sonuç kümesini işlemek ve bu zip akışını yapmak için döngü yalnızca 6-8 satır Java kodudur.
dir_index
aramalarını hızlandırır, genellikle varsayılan olarak etkin olduğu, ancak dizindeki başına dosya sayısını sınırlayabilir.