Bagaimana cara paling efisien saya menyimpan dan menyajikan 1.000.000+ file gzip kecil di server web Linux?

10

Saya memiliki konten statis besar yang harus saya sampaikan melalui server web berbasis Linux. Ini adalah satu set lebih dari satu juta file gzip kecil. 90% dari file kurang dari 1K dan file yang tersisa paling banyak 50K. Di masa depan, ini bisa tumbuh hingga lebih dari 10 juta file gzip.

Haruskah saya meletakkan konten ini dalam struktur file atau haruskah saya mempertimbangkan untuk meletakkan semua konten ini dalam database? Jika berada dalam struktur file, dapatkah saya menggunakan direktori besar atau haruskah saya mempertimbangkan direktori yang lebih kecil?

Saya diberitahu bahwa struktur file akan lebih cepat untuk pengiriman, tetapi di sisi lain, saya tahu bahwa file akan memakan banyak ruang pada disk, karena blok file akan lebih dari 1K.

Apa strategi terbaik terkait kinerja pengiriman?

MEMPERBARUI

Sebagai catatan, saya telah melakukan tes di bawah Windows 7, dengan setengah juta file:

masukkan deskripsi gambar di sini

Jérôme Verstrynge
sumber

Jawaban:

6

Saya kira struktur FS akan lebih cepat, tetapi Anda akan memerlukan struktur direktori yang baik untuk menghindari direktori dengan jumlah file yang sangat besar.

Saya tidak akan terlalu khawatir tentang ruang disk yang hilang. Sebagai contoh, pada ukuran blok 16K, Anda akan kehilangan ruang 15GB dalam kasus terburuk di mana Anda memerlukan satu blok tambahan untuk setiap file tunggal. Dengan ukuran disk saat ini, itu bukan apa-apa dan Anda dapat menyesuaikan parameter sistem file Anda untuk kebutuhan spesifik Anda.

Sven
sumber
5

Jika Anda memilih opsi struktur file, satu hal yang dapat Anda lakukan untuk meningkatkan kinerja I / O disk setidaknya sampai taraf tertentu adalah me-mount partisi dengan noatime + nodiratime kecuali Anda harus memilikinya. Mereka sama sekali tidak penting, jadi saya sarankan melakukan itu. Mungkin Anda juga bisa menggunakan solid-state drive.

syair pujian
sumber
4

Saya pikir jawaban yang benar di sini tergantung pada bagaimana file akan diindeks ... apa yang menentukan kapan file yang diberikan dipilih untuk pengiriman.

Jika Anda sudah membuat kueri basis data untuk menentukan nama file Anda, Anda mungkin menemukan bahwa Anda lebih baik menyimpan file di sana dalam catatan db, Anda dapat menemukan hasil terbaik dari mengubah beberapa pengaturan paging di database Anda dari pilihan dan kemudian menyimpan file di db (mis: halaman yang lebih besar untuk memperhitungkan semua catatan gumpalan), atau Anda mungkin menemukan bahwa Anda masih lebih baik menggunakan sistem file.

Opsi basis data memiliki peluang sedikit lebih baik untuk dikerjakan karena, dengan sejuta catatan, sangat mungkin bahwa setiap file tidak mungkin sama-sama dipertanyakan. Jika Anda berada dalam situasi di mana satu file mungkin ditanya beberapa kali berturut-turut, atau hampir berturut-turut, database dapat bertindak sebagai cache de facto untuk file yang baru saja diambil, dalam hal ini Anda akan sering mendapatkan hasil file Anda sudah dimuat ke memori. Anda mungkin perlu hati-hati menyetel internal mesin database Anda untuk mendapatkan perilaku yang Anda inginkan.

Tetapi hal utama yang harus diambil dari jawaban saya adalah bahwa Anda tidak benar-benar tahu apa yang akan bekerja paling baik sampai Anda mencobanya dengan beberapa data uji yang representatif dan mengukur hasilnya.

Joel Coel
sumber
1

Dengan sistem file modern, itu seharusnya tidak menjadi masalah. Saya sudah menguji XFS dengan 1 miliar file dalam direktori yang sama, dan saya cukup yakin ext4 juga akan baik-baik saja (selama filesystem itu sendiri tidak terlalu besar). Memiliki cukup memori untuk menyimpan entri direktori; cache prosesor yang lebih besar juga akan banyak membantu.

wazoox
sumber
2
Sistem file EXT tidak dapat mengatasi dengan baik jumlah file yang tinggi dalam direktori yang sama; terutama tidak dengan pengaturan direktori_index default. Tidak menguji XFS dengan jumlah file yang tinggi dalam dir yang sama tetapi saya cukup yakin EXT tidak akan bekerja dengan apa pun yang mendekati 1 miliar dalam dir yang sama.
Hrvoje Špoljar
1
Saya mendengar reiserfs baik untuk file kecil, tetapi kemudian saya juga mendengar orang yang memelihara perangkat lunak ada di penjara (!) Sehingga masa depan reiserfs tidak pasti. Saya pribadi akan menggunakan EXT4, dan XFS sebagai pilihan kedua. Bukankah XFS terbaik untuk file besar?
öde
Dulu, tetapi jika Anda menjalankan kernel baru (3.0 dan lebih tinggi) itu berfungsi dengan baik untuk file kecil juga.
wazoox