Jaka jest dobra strategia dla pamięci masowej dla milionów małych plików (średnio około 50 KB) z funkcją automatycznego przycinania plików starszych niż 20 minut? Muszę pisać i uzyskiwać do nich dostęp z serwera WWW.Strategia masowego przechowywania małych plików
Obecnie używam ext4, a podczas usuwania (zaplanowany w cron) wzrost użycia dysku HDD do 100% z [flush-8: 0] pokazujący się jako proces, który tworzy ładunek. Obciążenie to koliduje z innymi aplikacjami na serwerze. Gdy nie ma żadnych usunięć, maksymalne wykorzystanie HDD wynosi 0-5%. Sytuacja jest taka sama w przypadku zagnieżdżonych i nie zagnieżdżonych struktur katalogów. Najgorsze jest to, że wydaje się, że usuwanie masy podczas obciążenia szczytowego jest wolniejsze niż tempo wstawiania, więc ilość plików, które trzeba usunąć, rośnie i rośnie.
Próbowałem zmienić harmonogramy (deadline, cfq, noop), to nie pomogło. Próbowałem też ustawić jonice do usuwania skryptu, ale to też nie pomogło.
Próbowałem GridFS z MongoDB 2.4.3 i działa ładnie, ale strasznie podczas masowego usuwania starych plików. Próbowałem uruchomić MongoDB z wyłączonym księgowaniem (nojournal) i bez potwierdzenia zapisu dla usunięcia i wstawienia (w = 0) i to nie pomogło. Działa tylko szybko i gładko, gdy nie ma żadnych operacji usuwania.
Próbowałem również przechowywanie danych w MySQL 5.5, w kolumnie BLOB w tabeli InnoDB, z zestawem silnika InnoDB użyć innodb_buffer_pool = 2GB, innodb_log_file_size = 1GB, innodb_flush_log_on_trx_commit = 2, ale perfomance było gorsze, obciążenie HDD był zawsze na 80% -100% (oczekiwano, ale musiałem spróbować). Tabela wykorzystywała tylko kolumnę BLOB, kolumnę DATETIME i CHAR (32) latin__bin UUID, z indeksami na kolumnach UUID i DATETIME, więc nie było miejsca na optymalizację, a wszystkie zapytania używały indeksów.
Zajrzałem do ustawień pdflush (proces płukania Linuksa, który tworzy ładunek podczas usuwania masy), ale zmiana wartości nic nie pomogła, więc przywróciłem ustawienia domyślne.
Nie ma znaczenia, jak często uruchamiam skrypt automatycznego przycinania, co 1 sekundę, co 1 minutę, co 5 minut, co 30 minut, zakłóca to znacząco serwer w obu kierunkach.
Próbowałem przechowywać wartość i-węzła, a podczas usuwania, usuwać stare pliki sekwencyjnie, najpierw sortując je z numerami i-węzłów, ale to nie pomogło.
Korzystanie CentOS 6. HDD jest SSD RAID 1.
Co byłoby dobre i rozsądne rozwiązanie dla mojego zadania, które rozwiąże automatycznego przycinania problem z wydajnością?
Czy próbowałeś już "spakować" pliki do katalogów w oparciu o czas ich utworzenia? Być może pomocne byłoby usunięcie kompletnych katalogów z "rm -rf". –
rm -rf nie działa z powodu błędu "argument list too long". – Atm
'rm -rf files_2013_Apr_29_0940' nie jest takie duże, prawda? Lub w 1-sekundowej szczegółowości lista będzie miała 60 wpisów. Oczywiście trzeba będzie śledzić nazwę pliku do mapowania katalogu. W końcu prawdopodobnie trzeba będzie mieć ponad 60 podkatalogów - "miliony plików" podzielone przez 20 * 60 to co najmniej 833 plików/katalogów. –