পাঠ্যক্রম খুলুন
মধ্যবর্তী পর্যায়

File, Block ও Object Storage-এর পার্থক্য

File, Block, and Object Storage

এই পাঠের কুইজ ↓৬ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • File, block ও object storage model
  • Metadata, authorization ও durability
  • Laravel disk abstraction-এর boundary

সমস্যা দিয়ে শুরু

App দুটি instance-এ চলার পরে upload করা invoice একবার দেখা যায়, আরেকবার 404। File প্রথম instance-এর local disk-এ আছে, দ্বিতীয়টি সেই path জানলেও content পায় না। Storage model এবং access boundary না বুঝে local path-কে distributed file identity ধরে নেওয়া সমস্যা তৈরি করে।

সহজ করে বুঝি

File storage directory/path ও filesystem semantics দেয়; shared network filesystem একাধিক host mount করতে পারে। Block storage raw volume দেয়, যার ওপর filesystem/database layout তৈরি হয়। Object storage bucket/key identity দিয়ে object API-তে read/write করে; POSIX rename বা append semantics ধরে নেওয়া যাবে না। Object metadata এবং application ownership metadata আলাদা। File location user authorization নয়; private invoice access identity ও policy দিয়ে যাচাই করতে হয়।

পরিচিত একটি উপমা

File storage একটি folder cabinet, block storage খালি জমি যেখানে নিজে cabinet বানাবেন, object storage token দিয়ে parcel জমা/তোলার warehouse। Parcel key জানলেই legitimate owner হওয়া প্রমাণ হয় না। Warehouse policy ও আপনার customer registry মিলিয়ে access দিতে হয়।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

Laravel ownership metadata পড়ে policy enforce করে।
Diagram-এর text flow দেখুন
flowchart TD
 U[Authorized customer] --> A[Laravel policy check]
 A --> M[(Upload ownership metadata)]
 A --> D[Configured private disk]
 D --> L[Local file or shared file store]
 D --> O[Object storage bucket]
 O --> S[Time limited download capability]

Laravel ownership metadata পড়ে policy enforce করে। Configured disk storage access abstraction দেয়। Object download-এর জন্য signed temporary capability তৈরি করা যেতে পারে, তবে expiry পর্যন্ত link possession access দিতে পারে। Local disk path সব replica-এ shared নয়। File backup, metadata backup ও reference consistency একসঙ্গে recovery plan-এ রাখুন।

PHP ও Laravel-এ প্রয়োগ

Controller-method fragment; $document route model, user authenticated এবং view policy configured। storage_key server-generated relative key; user path সরাসরি ব্যবহার করবেন না। Local private disk demonstration, object storage হলে temporary URL/streaming আলাদা উপায়। Missing file controlled 404 দেয়।

php
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Storage;

Gate::authorize('view', $document);
$disk = Storage::disk('local');
abort_unless($disk->exists($document->storage_key), 404);

return $disk->download(
    $document->storage_key,
    'invoice.pdf',
    ['Cache-Control' => 'private, no-store']
);

সুবিধা, সীমাবদ্ধতা ও trade-off

Local storage simple ও cheap development baseline, multi-instance shared access দেয় না। Shared filesystem legacy filesystem behavior সহজ করতে পারে, কিন্তু latency ও availability dependency যোগ করে। Object storage large blobs ও durable lifecycle policy-তে useful, small random in-place writes-এর জন্য filesystem replacement ধরে নেওয়া ঠিক নয়। Provider durability claim ও application backup/retention requirement এক জিনিস নয়।

সাধারণ ভুল

  • Private files public web directory-তে রেখে শুধু obscure name দিয়ে নিরাপত্তা ভাবা।
  • Database transaction object upload-ও rollback করবে ধরে নেওয়া।
  • User filename দিয়ে unrestricted relative path বানানো।

আরও একটু গভীরে

Blob write successful কিন্তু metadata commit fail হলে orphan object হতে পারে। Metadata committed কিন্তু upload incomplete হলে broken reference হয়। Pending/ready state, checksum/size validation ও periodic orphan cleanup design করুন। Versioning accidental overwrite recovery সাহায্য করে; retention, deletion ও legal requirement অনুযায়ী lifecycle policy লাগে। Storage egress, request count ও replication cost capacity estimate-এ ধরুন।

মনে রাখুন

Storage API semantics কাজের সঙ্গে মেলান। Metadata ownership ও blob location আলাদা। Replica scaling-এর আগে shared access এবং failure recovery policy ঠিক করুন।

নিজে চেষ্টা করুন

এক document upload-এর pending→ready lifecycle আঁকুন। File write ও metadata commit-এর প্রতিটি crash point-এ orphan বা broken reference কী হবে লিখুন। Two app replica থেকে private download authorization পরীক্ষা করুন।

নিজের বোঝা যাচাই করুন

1. Object key file path?

দেখতে slash থাকতে পারে, কিন্তু underlying object API filesystem directory semantics নাও দেয়। Product contract পড়ুন।

2. Local disk দুই server share করে?

নিজে নয়। একই নামের disk configuration প্রতিটি host-এর local path আলাদা হতে পারে। Shared storage আলাদা requirement।

3. Private URL অনুমতি?

Signed URL bearer capability হতে পারে। আগে user authorization করে সীমিত expiry দিন; link leak risk বিবেচনা করুন।

4. DB rollback blob মুছে?

না। External storage আলাদা system। Explicit cleanup বা state machine দরকার।

5. Durability মানে backup?

না। Accidental delete/overwrite, retention ও recovery point আলাদা concern। Versioning ও tested independent recovery policy লাগতে পারে।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।