Yang memblokir ukuran jutaan file kecil

10

Saya memiliki 2x 4TB Disk di hardware RAID1 (mungkin LSI MegaRaid) di Debian Wheezy. Ukuran blok fisik adalah 4kB. Saya akan menyimpan 150-200 juta file kecil (antara 3 dan 10kB). Saya tidak meminta kinerja, tetapi untuk filesystem terbaik dan ukuran blok untuk menghemat penyimpanan. Saya telah menyalin file 8200 byte ke ext4 dengan ukuran blok 4kB. Ini membutuhkan 32kB disk !? Apakah penjurnalan alasan untuk itu? Jadi opsi apa yang ada untuk menyimpan sebagian besar penyimpanan untuk file sekecil itu?

rabudde
sumber

Jawaban:

1

Jika saya berada dalam situasi itu, saya akan melihat sebuah database yang dapat menyimpan semua data dalam satu file dengan indeks yang kompak dan berbasis offset, bukan sebagai file yang terpisah. Mungkin basis data yang memiliki driver FUSE tersedia untuk berinteraksi dengannya sebagai file bila perlu, tanpa mereka sebenarnya MENJADI file terpisah.

Sebagai alternatif, Anda dapat melihat katakanlah, persentil ke-60 - 70 dari ukuran file, dan mencoba menyesuaikan ukuran file tersebut langsung ke node tree sistem file, daripada sebagai blok terpisah pada disk. Menyimpan 10k di setiap node mungkin merupakan pertanyaan besar, tetapi jika Anda bisa mendapatkan 60% -70% file di sana, itu mungkin akan menjadi kemenangan besar.

Hanya filesystem tertentu yang dapat melakukan itu sama sekali (reiserfs adalah satu), dan saya kira itu semua tergantung pada ukuran persentil itu, apakah itu AKAN pas di pohon. Anda mungkin dapat menyetelnya. Saya kira coba untuk memasukkan sisanya ke dalam satu blok.

Dan jangan khawatir tentang jurnal; mereka memiliki batas ukuran atas pula.


sumber
4
Tidak, tidak, tidak, tidak, tidak, tidak, tidak hanya ... tidak untuk paragraf 1 Anda. Saya membuat kesalahan ini bertahun-tahun yang lalu dan itu harus diurungkan nanti. Saya juga mewarisi sistem yang menggunakan pola desain ini. File termasuk dalam sistem file, atau sebagai kompromi, dalam objek FileStream SQL Server jika Anda harus menggabungkannya (jadi mungkin driver FUSE Anda, tapi tetap saja tidak ada). Ada pertimbangan lain ketika bekerja di sistem file, seperti jangan menaruh 4 juta file dalam satu folder (saya juga membuat kesalahan itu).
Mark Henderson
2
@ MarkHenderson tetapi masalahnya adalah menentukan apa yang HARUS menjadi file, dan apa yang seharusnya menjadi catatan. Tanpa ada rincian lebih lanjut yang telah disediakan, ratusan juta hal kecil terdengar JAUH lebih seperti catatan bagi saya. Hanya karena ia saat ini memilikinya sebagai file, itu tidak berarti bahwa mereka harus tetap seperti itu, atau seharusnya seperti itu. Juga, saya tidak pernah sedetik pun menyarankan menggunakan SQL Server untuk pekerjaan;)
2
5 tahun yang lalu saya mewarisi sistem dengan 1 juta file dalam satu folder, dan sekitar 10.000 file 1-4KB baru setiap hari. Saya memutuskan untuk melemparkan mereka semua ke tabel ISAM karena "Hei, mereka hanya teks sederhana untuk dianalisis!" dan kemudian itu menjadi kesalahan besar karena saya sekarang memiliki meja 12GB tunggal dengan satu baris baris yang kebanyakan tidak melakukan apa-apa setelah mereka diproses. Jadi saya beralih kembali ke meletakkannya di sistem file dengan folder heirachial berdasarkan GUID dari nama file.
Mark Henderson
(mengapa satu meja 12GB dengan baris squllion menjadi masalah adalah masalah yang berbeda yang tidak akan saya bahas di sini)
Mark Henderson
2
@ MarkHenderson: Ini bukan masalah yang berbeda, itulah MENGAPA Anda mengatakan itu adalah solusi yang salah ("... kesalahan besar karena saya sekarang memiliki meja 12GB tunggal dengan satu baris baris ...."). Anda memilih mesin database / format tabel yang salah, tetapi konsep menempatkan banyak hal kecil ke dalam satu file dengan INDEX adalah suara, selama Anda melakukannya dengan benar. Apa yang Anda inginkan adalah database yang unggul di key / value store untuk jutaan objek kecil, dengan sharding otomatis. Juga perhatikan bahwa dia secara khusus tidak memedulikan kinerja, hanya ruang.