GridFS কী এবং কিভাবে কাজ করে?

MongoDB GridFS - মঙ্গোডিবি (MongoDB) - Database Tutorials

347

GridFS হল MongoDB তে বড় ফাইল যেমন ছবি, ভিডিও, অডিও, ডকুমেন্ট ইত্যাদি স্টোর করার জন্য ব্যবহৃত একটি সিস্টেম। MongoDB সাধারণত BSON (Binary JSON) ফরম্যাটে ডেটা স্টোর করে, কিন্তু BSON এর আকার সীমিত (16MB পর্যন্ত)। তাই বড় ফাইলগুলো স্টোর করার জন্য MongoDB GridFS ব্যবহার করা হয়। GridFS MongoDB তে একটি স্টোরেজ সিস্টেম যা ফাইলগুলোকে ছোট ছোট অংশে ভাগ করে (chunks) এবং এগুলোকে দুটি পৃথক কালেকশনে স্টোর করে।


GridFS এর মৌলিক ধারণা

MongoDB তে GridFS ফাইলগুলিকে দুটি আলাদা কালেকশনে ভাগ করে:

  1. fs.files: এই কালেকশনটি ফাইলের মেটাডেটা ধারণ করে। যেমন: ফাইলের নাম, মিমে টাইপ, সাইজ, আপলোডের সময় ইত্যাদি।
  2. fs.chunks: এই কালেকশনটি ফাইলের ডাটা ধারণ করে, যেখানে ফাইলটিকে ছোট ছোট চাঙ্কে ভাগ করা হয়।

যখন আপনি একটি বড় ফাইল MongoDB তে আপলোড করেন, MongoDB GridFS এই ফাইলটি ছোট ছোট অংশে ভাগ করে এবং প্রতিটি অংশকে fs.chunks কালেকশনে স্টোর করে, এবং মেটাডেটা fs.files কালেকশনে সংরক্ষণ করে।


GridFS কিভাবে কাজ করে?

GridFS তে বড় ফাইল স্টোর করার জন্য এবং পুনরুদ্ধারের জন্য কিছু নির্দিষ্ট ধাপ রয়েছে:

1. ফাইল আপলোড (Upload)

GridFS ব্যবহারের সময় প্রথমে ফাইলটি ছোট ছোট অংশে (chunks) ভাগ করা হয়, এবং এই অংশগুলো fs.chunks কালেকশনে সংরক্ষিত হয়। ফাইলের মেটাডেটা যেমন নাম, সাইজ ইত্যাদি fs.files কালেকশনে সংরক্ষিত থাকে।

  • ফাইলটিকে নির্দিষ্ট সাইজে ভাগ করা হয় (সাধারণত 255KB পর্যন্ত একেকটি chunk)।
  • প্রতিটি chunk-এ একটি _id থাকে, এবং এগুলোর সাথে ফাইলের মেটাডেটা সংযুক্ত থাকে।
  • ফাইলের সম্পূর্ণ ডেটা এবং মেটাডেটা MongoDB তে সংরক্ষিত থাকে, যাতে সহজেই ফাইলটি পুনরুদ্ধার এবং পরিচালনা করা যায়।

2. ফাইল পুনরুদ্ধার (Download)

ফাইলটি পুনরুদ্ধার করার সময় GridFS ফাইলের অংশগুলো (chunks) একত্রিত করে এবং একটি পূর্ণাঙ্গ ফাইল হিসেবে তৈরি করে। MongoDB স্বয়ংক্রিয়ভাবে ফাইলের অংশগুলো সংগঠিত করে এবং একত্রে পুনরুদ্ধার করে।

  • ফাইলের _id ব্যবহার করে MongoDB ফাইলটি খুঁজে বের করে এবং অংশগুলো একত্রিত করে সম্পূর্ণ ফাইল তৈরি করে।
  • ফাইলটির ডাউনলোডের জন্য GridFS কেবলমাত্র প্রয়োজনীয় অংশগুলো লোড করে এবং প্রক্রিয়াটি দ্রুত করে।

GridFS এর উপকারিতা

  1. বড় ফাইল স্টোরেজ:
    MongoDB তে বড় ফাইল যেমন ভিডিও, ছবি, ডকুমেন্ট ইত্যাদি সহজেই সংরক্ষণ করা যায়। MongoDB এর সাধারণ BSON ফরম্যাটে 16MB এর সীমা থাকলেও GridFS বড় ফাইলগুলি ছোট ছোট অংশে ভাগ করে সংরক্ষণ করতে সক্ষম।
  2. সহজ ডেটা অ্যাক্সেস:
    GridFS ডেটা দ্রুত অ্যাক্সেস এবং ম্যানিপুলেশন করার জন্য একটি নির্দিষ্ট সিস্টেম সরবরাহ করে। ব্যবহারকারী সহজেই একাধিক ফাইল স্টোর এবং তাদের সংশ্লিষ্ট মেটাডেটা খুঁজে পেতে পারে।
  3. ডিস্ট্রিবিউটেড সিস্টেম:
    MongoDB ডিস্ট্রিবিউটেড নো-এসকিউএল ডেটাবেস, তাই GridFS ডেটা একাধিক সার্ভারে স্কেল করা যায়, এবং এটি হাই অ্যাভেইলেবিলিটি এবং রেডানডেন্সি নিশ্চিত করে।
  4. অ্যাপ্লিকেশন ইন্টিগ্রেশন:
    GridFS অন্যান্য MongoDB ড্রাইভার এবং লাইব্রেরির মাধ্যমে সহজে অ্যাপ্লিকেশনগুলোর সঙ্গে ইন্টিগ্রেট করা যায়। এটি বিশেষভাবে ওয়েব অ্যাপ্লিকেশন বা ক্লাউড সার্ভিসের জন্য উপকারী।

GridFS ব্যবহারের উদাহরণ

MongoDB তে GridFS ব্যবহারের জন্য Node.js ড্রাইভার ব্যবহার করা যেতে পারে। নিচে একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে একটি ফাইল GridFS তে আপলোড এবং ডাউনলোড করা হচ্ছে:

ফাইল আপলোড (Upload) করার উদাহরণ:

const { MongoClient, GridFSBucket } = require('mongodb');
const fs = require('fs');

async function uploadFile() {
  const client = new MongoClient('mongodb://localhost:27017', { useUnifiedTopology: true });
  await client.connect();

  const db = client.db('testDB');
  const bucket = new GridFSBucket(db);

  const uploadStream = bucket.openUploadStream('example.jpg');
  const fileStream = fs.createReadStream('example.jpg');
  
  fileStream.pipe(uploadStream).on('finish', () => {
    console.log('File uploaded successfully');
    client.close();
  });
}

uploadFile().catch(console.error);

এটি example.jpg নামক ফাইলটি MongoDB তে আপলোড করবে এবং GridFS এর মাধ্যমে সেই ফাইলটি স্টোর করবে।

ফাইল ডাউনলোড (Download) করার উদাহরণ:

const { MongoClient, GridFSBucket } = require('mongodb');
const fs = require('fs');

async function downloadFile() {
  const client = new MongoClient('mongodb://localhost:27017', { useUnifiedTopology: true });
  await client.connect();

  const db = client.db('testDB');
  const bucket = new GridFSBucket(db);

  const downloadStream = bucket.openDownloadStreamByName('example.jpg');
  const fileStream = fs.createWriteStream('downloaded_example.jpg');
  
  downloadStream.pipe(fileStream).on('finish', () => {
    console.log('File downloaded successfully');
    client.close();
  });
}

downloadFile().catch(console.error);

এটি example.jpg ফাইলটি GridFS থেকে ডাউনলোড করে এবং downloaded_example.jpg নামে সংরক্ষণ করবে।


GridFS এর সীমাবদ্ধতা এবং বিকল্প

  • ফাইল সাইজ সীমা: GridFS ফাইলটি ছোট ছোট অংশে ভাগ করে রাখে, তবে একক ফাইলের জন্য বড় সাইজের সিস্টেমে আরো অপ্টিমাইজেশনের প্রয়োজন হতে পারে।
  • পারফরম্যান্স: GridFS সাধারণত ছোট ফাইলের জন্য কার্যকর, তবে খুব বড় ফাইলের জন্য এটি কিছুটা স্লো হতে পারে।

এ কারণে, GridFS ব্যবহারের আগে অবশ্যই আপনার সিস্টেমের প্রয়োজনীয়তা এবং ফাইল সাইজ সম্পর্কে চিন্তা করা উচিত।


সারাংশ

GridFS MongoDB তে বড় ফাইল স্টোর করার জন্য ব্যবহৃত একটি শক্তিশালী ফিচার, যা ফাইলটিকে ছোট ছোট অংশে ভাগ করে এবং এগুলোকে MongoDB ডেটাবেসে সংরক্ষণ করে। GridFS ডেটার ব্যাকআপ, রিস্টোর এবং দ্রুত অ্যাক্সেসের জন্য একটি কার্যকরী সিস্টেম সরবরাহ করে, এবং MongoDB ব্যবহারকারীকে ফাইল ম্যানেজমেন্টের জন্য একটি সহজ এবং স্কেলযোগ্য সমাধান দেয়।

Content added By
Promotion

Are you sure to start over?

Loading...