Saya mengembangkan situs web baru dan saya ingin menggunakan GridFS sebagai penyimpanan untuk semua unggahan pengguna, karena ini menawarkan banyak keuntungan dibandingkan dengan penyimpanan sistem file biasa.
Tolok ukur dengan GridFS yang dilayani oleh nginx menunjukkan, bahwa ini tidak secepat sistem file normal yang dilayani oleh nginx.
Apakah ada orang di luar sana, yang sudah menggunakan GridFS di lingkungan produksi, atau akan menggunakannya untuk proyek baru?
Jawaban:
Saya menggunakan gridfs saat bekerja di salah satu server kami yang merupakan bagian dari situs web pembanding harga dengan statistik lalu lintas yang terhormat (sekitar 25 ribu pengunjung per hari). Server tidak memiliki banyak ram, 2gigs, dan bahkan cpu tidak terlalu cepat (Core 2 duo 1.8Ghz) tetapi server memiliki banyak ruang penyimpanan: 10Tb (sata) dalam konfigurasi raid 0. Pekerjaan yang dilakukan server sangat sederhana:
Setiap produk pada pembanding harga kami memiliki gambar (ada sekitar 10 juta produk menurut db produk kami), dan tugas server adalah mengunduh gambar, mengubah ukurannya, menyimpannya di gridfs, dan mengirimkannya ke browser pengunjung. .. jika tidak ada di grid ... atau ... kirimkan ke browser pengunjung jika sudah disimpan di grid. Jadi, ini bisa disebut sebagai 'skema cdn tradisional'.
Kami telah menyimpan dan memproses 4 juta gambar di server ini sejak aktif dan berjalan. Mengubah ukuran dan menyimpan barang dilakukan dengan skrip php sederhana ... tapi yang pasti, skrip python, atau sesuatu seperti java bisa lebih cepat.
Ukuran data saat ini: 11.23g
Ukuran penyimpanan saat ini: 12.5g
Indeks: 5
Ukuran indeks: 849.65m
Tentang keandalan: Ini sangat andal. Server tidak memuat, ukuran indeks baik-baik saja, kueri cepat
Tentang kecepatan: Yang pasti, tidak secepat penyimpanan file lokal, mungkin 10% lebih lambat, tapi cukup cepat untuk digunakan secara realtime bahkan ketika gambar perlu diproses, yang dalam kasus kami, sangat bergantung pada php. Waktu pemeliharaan dan pengembangan juga telah dikurangi: menghapus satu atau beberapa gambar menjadi sangat mudah: cukup kueri db dengan perintah hapus sederhana. Hal menarik lainnya: ketika kami me-reboot server lama kami, dengan penyimpanan file lokal (jutaan file dalam ribuan folder), terkadang hang berjam-jam karena sistem melakukan pemeriksaan integritas file (ini benar-benar membutuhkan waktu berjam-jam ...). Kami tidak memiliki masalah ini lagi dengan gridfs, gambar kami sekarang disimpan dalam potongan mongodb besar (file 2gb)
Jadi ... dalam pikiran saya ... Ya, gridfs cukup cepat dan dapat diandalkan untuk digunakan dalam produksi.
sumber
Seperti yang disebutkan, ini mungkin tidak secepat filesystem biasa, tetapi ia memberi Anda keuntungan lebih dari filesystem biasa yang menurut saya layak untuk diberikan sedikit kecepatan.
Pada akhirnya, dengan sharding, Anda mungkin mencapai titik di mana penyimpanan GridFS benar-benar menjadi opsi yang lebih cepat dibandingkan dengan sistem file biasa dan satu node.
sumber
Perhatian pada perbaikan untuk DB yang lebih besar - sistem baru yang kami kembangkan, mongo tidak keluar dengan bersih, dan memperbaiki GridFS 7TB sepertinya akan memakan waktu 130 jam.
Karena itu, saya pikir saya akan beralih ke OpenStack Swift atau Ceph. Tetap saja, sampai saat itu itu bagus. Dan modul nginx-gridfs sangat bagus.
sumber
Modul nginx-gridfs mdirolf sangat bagus dan cukup mudah untuk disiapkan. Kami menggunakannya dalam produksi di paint.ly untuk melayani semua lukisan dan sejauh ini tidak ada masalah.
sumber
Saya tidak merekomendasikan menggunakan gridfs kecuali Anda tahu apa yang Anda lakukan. GridFS hanyalah lapisan abstraksi yang membagi file menjadi potongan dan menyimpan file dalam dua koleksi. Lebih banyak file - lebih banyak overhead. Jika Anda mengharapkan file berukuran sama, tidak melebihi 32M atau lebih - Anda berada di jalur yang benar. Jangan mencoba menyimpan file besar di gridfs. Mengapa?
Jika Anda berpikir tentang proyek yang dimuat baca - pertimbangkan untuk memuat file ke dalam dokumen secara langsung (jika berukuran 16M atau kurang) atau pilih clusterf lain, dan tautkan nama file / inode ke logika Anda.
Semoga ini membantu.
sumber