Saya hanya bisa menjawab untuk MongoDB di sini, saya tidak akan berpura-pura tahu banyak tentang HDFS dan teknologi sejenis lainnya.
Implementasi GridF sepenuhnya merupakan sisi klien di dalam driver itu sendiri. Ini berarti tidak ada pemuatan atau pemahaman khusus tentang konteks penyajian file dalam MongoDB itu sendiri, secara efektif MongoDB sendiri bahkan tidak memahami bahwa itu adalah file ( http://docs.mongodb.org/manual/applications/gridfs/ ).
Ini berarti bahwa menanyakan bagian mana pun dari files
atau chunks
koleksi akan menghasilkan proses yang sama seperti untuk kueri lainnya, di mana ia memuat data yang dibutuhkan ke set kerja Anda ( http://en.wikipedia.org/wiki/Working_set ) yang mewakili satu set data (atau semua memuat data pada saat itu) yang dibutuhkan oleh MongoDB dalam jangka waktu tertentu untuk mempertahankan kinerja yang optimal. Ia melakukannya dengan memasukkannya ke dalam RAM (baik secara teknis OS melakukannya).
Hal lain yang perlu dipertimbangkan adalah bahwa ini adalah driver yang diterapkan. Ini berarti bahwa spesifikasinya dapat bervariasi, tetapi menurut saya tidak. Semua driver akan mengizinkan Anda untuk menanyakan sekumpulan dokumen dari files
koleksi yang hanya menampung meta data file yang memungkinkan Anda menyajikan file itu sendiri dari chunks
koleksi dengan satu kueri.
Namun bukan itu yang penting, Anda ingin menyajikan file itu sendiri, termasuk datanya; ini berarti Anda akan memuat files
koleksi dan chunks
berikutnya koleksi ke perangkat kerja Anda.
Dengan mengingat hal itu, kami telah mencapai halangan pertama:
Apakah file dari gridfs akan di-cache di ram dan bagaimana pengaruhnya terhadap kinerja baca-tulis?
Performa membaca file kecil bisa luar biasa, langsung dari RAM; tulisannya akan sama bagusnya.
Untuk file yang lebih besar, tidak demikian. Sebagian besar komputer tidak akan memiliki 600 GB RAM dan kemungkinan, sebenarnya cukup normal, untuk menampung partisi 600 GB dari satu file pada satu mongod
contoh. Hal ini menimbulkan masalah karena file tersebut, agar dapat disajikan, harus sesuai dengan perangkat kerja Anda, namun ukurannya tidak mungkin lebih besar dari RAM Anda; pada titik ini Anda dapat memiliki page thrashing ( http://en.wikipedia.org/wiki/Thrashing_%28computer_science%29 ) di mana server hanya melakukan kesalahan halaman 24/7 mencoba memuat file. Tulisan di sini juga tidak lebih baik.
Satu-satunya cara untuk mengatasinya adalah dengan mulai meletakkan satu file di banyak pecahan :\
.
Catatan:satu hal lagi yang perlu dipertimbangkan adalah bahwa ukuran rata-rata default dari chunks
"potongan" adalah 256KB, jadi itu banyak dokumen untuk file 600GB. Pengaturan ini dapat dimanipulasi di sebagian besar driver.
Apa yang akan terjadi dengan gridfs ketika saya mencoba menulis beberapa file secara bersamaan. Apakah akan ada kunci untuk operasi baca/tulis? (Saya akan menggunakannya hanya sebagai penyimpanan file)
GridFS, karena hanya spesifikasi menggunakan kunci yang sama seperti pada koleksi lainnya, baik kunci baca dan tulis pada tingkat basis data (2.2+) atau pada tingkat global (pra-2.2). Keduanya mengganggu satu sama lain juga, yaitu bagaimana Anda bisa memastikan pembacaan yang konsisten dari dokumen yang sedang ditulis?
Meskipun demikian, kemungkinan pertikaian ada berdasarkan spesifikasi skenario Anda, lalu lintas, jumlah penulisan/pembacaan bersamaan, dan banyak hal lain yang tidak kami ketahui.
Mungkin ada solusi lain yang bisa menyelesaikan masalah saya dengan lebih efisien?
Saya pribadi telah menemukan bahwa S3 (seperti yang dikatakan @mluggy) dalam format redundansi yang dikurangi berfungsi paling baik menyimpan sebagian data meta tentang file dalam MongoDB, seperti halnya menggunakan GridFS tetapi tanpa kumpulan potongan, biarkan S3 menangani semua distribusi, pencadangan, dan hal-hal lain untuk Anda.
Semoga sudah jelas, semoga membantu.
Sunting:Tidak seperti yang saya katakan secara tidak sengaja, MongoDB tidak memiliki kunci level koleksi, ini adalah kunci level basis data.