Milyonlarca küçük dosya için hangi blok boyutları


10

Debian Wheezy'de RAID1 donanımında (LSI MegaRaid olabilir) 2x 4 TB Disklerim var. Fiziksel blok boyutu 4kB'dir. 150-200 milyon küçük dosyayı (3 ile 10 kb arasında) depolayacağım. Performans istemiyorum, ancak depolamadan tasarruf etmek için en iyi dosya sistemi ve blok boyutları için soruyorum. Ben 4kB blok boyutu ile bir ext4 üzerine 8200 bayt bir dosya kopyaladım. Bu 32kB disk aldı !? Günlük tutmak bunun sebebi midir? Peki, bu tür küçük dosyalar için en fazla depolama alanını kaydetmek için hangi seçenekler var?


Yanıtlar:


1

Bu durumda olsaydım, tüm verileri ayrı dosyalar yerine kompakt, ofset tabanlı bir dizine sahip tek bir dosyada saklayabilecek bir veritabanına bakıyordum. Belki bir FUSE sürücüsü gerektiğinde dosya olarak etkileşim için kullanılabilir bir veritabanı, onlar olmadan aslında hepsi ayrı dosyaları OLMAK.

Alternatif olarak, dosya boyutlarının 60. - 70. yüzdelik dilimlerine bakabilir ve bu dosya boyutunu diskteki ayrı bloklar yerine doğrudan dosya sistemi ağaç düğümlerine sığdırmaya çalışabilirsiniz. Her düğümde 10k depolamak muhtemelen büyük bir sorudur, ancak orada dosyaların% 60-% 70'ini alabilirseniz, bu büyük bir kazanç olacaktır.

Sadece belirli dosya sistemleri bunu yapabilir (reiserfs birdir) ve sanırım hepsi, yüzdelik dilimin ağaca sığıp sığmayacağına bağlıdır. Ayarlayabilirsiniz. Sanırım gerisini bir bloğa sığdırmaya çalışın.

Ve dergiler için endişelenmeyin; zaten üst boyut sınırı var.


4
Hayır hayır hayır hayır hayır hayır hayır hayır sadece ... hayır 1. paragrafa. Bu hatayı yıllar önce yaptım ve daha sonra geri alınması gerekiyordu. Ayrıca bu tasarım desenini kullanan sistemleri miras aldım. Dosyalar dosya sisteminde aittir veya bir SQL Server FileStream nesnesi içinde bir uzlaşma olarak eğer gerekir bunları birleştirmek (belki sizin FUSE sürücüsü, ama yine de sadece hayır). Dosya sisteminde çalışırken göz önünde bulundurulması gereken başka hususlar vardır, örneğin bir klasöre 4 milyon dosya koymayın (bu hatayı da yaptım).
Mark Henderson

2
@MarkHenderson ama sorun ne bir dosya ve ne bir kayıt olması gerektiğini tanımlamaktır. Daha fazla ayrıntı sağlanmadan, yüz milyonlarca küçük şey bana daha çok kayıt gibi geliyor. Şu anda onları dosya olarak bulundurması, bu şekilde kalmaları gerektiği ya da bu şekilde olması gerektiği anlamına gelmez. Ayrıca, asla bir saniye için SQL Server iş önerdi;)

2
5 yıl önce tek bir klasörde 1 milyon dosya ve her gün yaklaşık 10.000 yeni 1-4KB dosya içeren bir sistem miras aldım. Hepsini ISAM masasına atmaya karar verdim çünkü "Hey, analiz için sadece düz metinler!" ve sonra bu büyük bir hataya dönüştü çünkü şimdi işlendikten sonra hiçbir şey yapmayan bir milyon satırlık tek bir 12GB masam vardı. Bu yüzden onları dosya adının GUID'ini temel alan heirachial klasörleriyle bir dosya sistemine koymaya geri döndüm.
Mark Henderson

(neden bir squllion satırlı tek bir 12GB tablo sorun oldu, buraya girmeyeceğim farklı bir konuydu)
Mark Henderson

2
@MarkHenderson: Bu farklı bir sorun değil, NEDEN yanlış çözüm olduğunu söylediniz ("... büyük bir hata çünkü şimdi bir milyar dolarlık tekli 12GB'lık bir masam vardı ..."). Yanlış veritabanı motoru / tablo biçimini seçersiniz, ancak bir çok küçük şeyi INDEX ile tek bir dosyaya koyma kavramı, doğru yaptığınız sürece sağlamdır. İstediğiniz şey, otomatik parçalama ile milyonlarca küçük nesne için anahtar / değer depolarında üstün olan bir veritabanıdır. Ayrıca özellikle performansla ilgilenmediğini, sadece alanla ilgilendiğini unutmayı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.