MongoDB - GridFS: Panduan Pemula untuk Menyimpan Berkas Besar

Hai, para pemrogram yang sedang berkembang! Hari ini, kita akan memulai perjalanan yang menarik ke dunia MongoDB dan fitur yang kuatnya, GridFS. Jangan khawatir jika Anda baru dalam pemrograman - saya akan menjadi panduan yang ramah, menjelaskan segala sesuatunya secara langkah demi langkah. mari kita masuk ke dalam!

MongoDB - GridFS

Apa Itu GridFS dan Mengapa Anda Harus Peduli?

Imaginasi Anda sedang mengatur sebuah perpustakaan besar. Anda memiliki buku dalam berbagai ukuran - beberapa buku cetak kecil, beberapa ensiklopedia yang berat. Tapi, apa bila Anda harus menyimpan gulungan besar yang terlalu besar untuk rak manapun? Itulah tempat GridFS berguna di dunia basis data.

GridFS adalah solusi MongoDB untuk menyimpan dan mengambil berkas besar seperti gambar, berkas audio, atau video. Itu seperti memiliki kamar khusus di perpustakaan kita untuk item yang berukuran besar.

Magi di Balik GridFS

GridFS bekerja dengan membagi berkas besar menjadi potongan yang lebih kecil. Picturing ini seperti memotong gulungan panjang menjadi bagian yang dapat dikelola. Setiap potongan berukuran 255KB secara default (itu seperti ukuran buku pendek). Potongan-potongan ini kemudian disimpan sebagai dokumen terpisah di dua koleksi:

  1. fs.files: Menyimpan metadata tentang berkas (seperti namanya, ukurannya, dll.)
  2. fs.chunks: Menyimpan konten berkas itu sendiri dalam bagian

Memulai dengan GridFS

Sebelum kita mulai menambahkan berkas ke GridFS, kita perlu mengatur lingkungan MongoDB kita. Jangan khawatir; saya akan memandu Anda!

Langkah 1: Instal MongoDB

Pertama, unduh dan instal MongoDB dari situs web resmi. Itu seperti mengatur gedung perpustakaan kita sebelum kita dapat mulai menyimpan buku.

Langkah 2: Instal Driver MongoDB

Kita akan menggunakan Python untuk berinteraksi dengan MongoDB. Instal driver PyMongo menggunakan pip:

pip install pymongo

Itu seperti mempekerjakan seorang perpustakaawan yang bisa berbicara dalam bahasa Python dan MongoDB!

Menambahkan Berkas ke GridFS

Sekarang kita sudah mengatur perpustakaan kita, mari kita mulai menambahkan beberapa buku - atau dalam kasus kita, berkas!

Unggah Berkas Dasar

Berikut adalah skrip sederhana untuk mengunggah berkas ke GridFS:

from pymongo import MongoClient
import gridfs

# Terhubung ke MongoDB
client = MongoClient('mongodb://localhost:27017')
db = client['mydatabase']

# Buat instance GridFS
fs = gridfs.GridFS(db)

# Buka dan baca berkas
with open('my_image.jpg', 'rb') as f:
contents = f.read()

# Simpan berkas di GridFS
file_id = fs.put(contents, filename='my_image.jpg')

print(f"Berkas diunggah dengan ID: {file_id}")

mari kitauraikan ini:

  1. Kita mengimpor library yang diperlukan dan terhubung ke database MongoDB kita.
  2. Kita membuat instance GridFS, yang seperti membuka pintu ke ruangan penyimpanan khusus kita.
  3. Kita membuka dan membaca berkas ('my_image.jpg' dalam kasus ini).
  4. Kita menggunakan fs.put() untuk menyimpan berkas di GridFS. Ini mengembalikan ID unik untuk berkas kita.

Menambahkan Metadata

kadang-kadang, kita ingin menambahkan informasi lebih banyak tentang berkas kita. Itu seperti menambahkan kartu deskripsi rinci ke buku perpustakaan. Berikut cara kita melakukan itu:

file_id = fs.put(contents,
filename='my_image.jpg',
content_type='image/jpeg',
author='Jane Doe',
date_taken='2023-06-15')

Dalam contoh ini, kita menambahkan informasi ekstra seperti jenis konten, penulis, dan tanggal gambar diambil.

Unggah Berkas Besar dalam Potongan

Ingat apa yang saya katakan tentang GridFS membagi berkas menjadi potongan? Kita dapat melakukan ini secara manual untuk berkas yang sangat besar untuk menghindari masalah memori:

def upload_large_file(filepath, chunk_size=255*1024):
with open(filepath, 'rb') as f:
filename = filepath.split('/')[-1]
file_id = fs.new_file(filename=filename)

while True:
chunk = f.read(chunk_size)
if not chunk:
break
file_id.write(chunk)

file_id.close()
return file_id._id

large_file_id = upload_large_file('very_large_video.mp4')
print(f"Berkas besar diunggah dengan ID: {large_file_id}")

Fungsi ini membaca berkas dalam potongan dan menulis setiap potongan ke GridFS. Itu seperti menyalin gulungan besar kita bagian per bagian.

Mengambil Berkas dari GridFS

Sekarang kita sudah menambahkan berkas, mari kita belajar bagaimana mengambilnya:

# Ambil berkas berdasarkan ID
file_data = fs.get(file_id).read()

# Simpan berkas
with open('retrieved_image.jpg', 'wb') as f:
f.write(file_data)

print("Berkas diambil dan disimpan!")

Skrip ini mengambil berkas dari GridFS dan menyimpannya ke komputer kita. Itu seperti meminjam buku dari ruangan penyimpanan khusus kita!

Menampilkan Semua Berkas di GridFS

Kadang-kadang, kita ingin melihat semua berkas yang kita simpan. Berikut cara:

for grid_file in fs.find():
print(f"Nama Berkas: {grid_file.filename}, Ukuran: {grid_file.length} byte")

Ini akan mencetak daftar semua berkas di GridFS, bersama dengan ukurannya. Itu seperti mendapatkan katalog semua item spesial di perpustakaan kita!

Menghapus Berkas dari GridFS

Akhirnya, mari kita belajar bagaimana menghapus berkas:

fs.delete(file_id)
print(f"Berkas dengan ID {file_id} telah dihapus.")

Ini menghapus berkas dengan ID yang ditentukan dari GridFS. Ingat, sekali hilang, hilang untuk selamanya!

Kesimpulan

Selamat! Anda baru saja mengambil langkah pertama ke dunia MongoDB's GridFS. Kita telah belajar bagaimana menyimpan, mengambil, menampilkan, dan menghapus berkas besar. Ingat, GridFS adalah alat kuat untuk mengelola data besar, dan dengan latihan, Anda akan menjadi master perpustakaan digital!

Berikut adalah tabel rujukan cepat metode GridFS utama yang kita telah bahas:

Metode Deskripsi
fs.put() Menyimpan berkas baru di GridFS
fs.get() Mengambil berkas dari GridFS
fs.find() Menampilkan semua berkas di GridFS
fs.delete() Menghapus berkas dari GridFS

Terus latih, tetap curiga, dan selamat pemrograman! Ingat, setiap ahli pernah menjadi pemula, jadi jangan takut untuk mencoba dan belajar dari kesalahan Anda. Anda sedang dalam perjalanan untuk menjadi ahli MongoDB GridFS!

Credits: Image by storyset