এতদিন Authentication নিয়ে কাজ করলাম। এবার আসল প্রশ্নে আসি — ইউজারের ডেটা রাখব কোথায়? Firebase দুইটা আলাদা ডেটাবেজ অপশন দেয়: Realtime Database আর Firestore। নাম শুনে গুলিয়ে ফেলা স্বাভাবিক, তাই এই পর্বে দুটোর পার্থক্য স্পষ্ট করে বুঝব — যাতে পরের পর্বগুলোতে সঠিক সিদ্ধান্ত নিয়ে এগোতে পারি।
দুটোই আসলে কী?
Realtime Database (RTDB) হলো Firebase-এর আদি ডেটাবেজ — পুরো ডেটাবেজটা একটামাত্র বিশাল JSON ট্রি। Firestore পরে এসেছে, আধুনিক ও বেশি স্ট্রাকচার্ড — ডেটা থাকে Document আর Collection আকারে (অনেকটা ফোল্ডার আর ফাইলের মতো)।
// Realtime Database — একটাই বড় JSON ট্রি
{
"books": {
"book1": { "title": "অপরাজিত", "author": "বিভূতিভূষণ" },
"book2": { "title": "পথের পাঁচালী", "author": "বিভূতিভূষণ" }
},
"users": {
"user1": { "name": "আরিফ" }
}
}
// Firestore — Collection আর Document
books (collection)
└── book1 (document) { title: "অপরাজিত", author: "বিভূতিভূষণ" }
└── book2 (document) { title: "পথের পাঁচালী", author: "বিভূতিভূষণ" }
users (collection)
└── user1 (document) { name: "আরিফ" }
পাশাপাশি তুলনা
| বিষয় | Realtime Database | Firestore |
|---|---|---|
| ডেটা গঠন | একটা বড় JSON ট্রি | Collection ও Document |
| Query ক্ষমতা | সীমিত, নেস্টেড ডেটায় কঠিন | শক্তিশালী, একাধিক ফিল্ডে ফিল্টার |
| স্কেলেবিলিটি | বড় হলে স্লো হতে পারে | বড় ডেটাসেটেও ভালো পারফরম্যান্স |
| অফলাইন সাপোর্ট | আছে (মোবাইলে ভালো) | আছে, ওয়েবেও শক্তিশালী |
| লেটেন্সি | খুবই কম — রিয়েল-টাইমে দ্রুত | কম, কিন্তু RTDB-এর চেয়ে সামান্য বেশি |
| ফ্রি টিয়ার | সহজ, স্টোরেজ ভিত্তিক | Read/Write অপারেশন ভিত্তিক |
| সেরা ব্যবহার | চ্যাট, লাইভ স্কোর, প্রেজেন্স স্ট্যাটাস | ব্লগ, ই-কমার্স, জটিল অ্যাপ ডেটা |
কোড দেখলে পার্থক্যটা আরও স্পষ্ট হয়
একটা বই যোগ করার উদাহরণ দুই ডেটাবেজে কেমন দেখতে —
// Realtime Database — ডেটা লেখা
import { ref, push } from "firebase/database";
import { db } from "./firebase";
await push(ref(db, "books"), {
title: "অপরাজিত",
author: "বিভূতিভূষণ",
});
// Firestore — ডেটা লেখা
import { collection, addDoc } from "firebase/firestore";
import { firestore } from "./firebase";
await addDoc(collection(firestore, "books"), {
title: "অপরাজিত",
author: "বিভূতিভূষণ",
});
ফাংশনের নাম আলাদা হলেও ধারণাটা একই — একটা নির্দিষ্ট লোকেশনে ডেটা লেখা হচ্ছে। মূল পার্থক্য আসে যখন একাধিক শর্ত দিয়ে ডেটা খুঁজতে হয় — সেখানে Firestore অনেক এগিয়ে।
// Firestore — একাধিক শর্তে খোঁজা সহজ
import { collection, query, where, getDocs } from "firebase/firestore";
const q = query(
collection(firestore, "books"),
where("author", "==", "বিভূতিভূষণ"),
where("year", ">", 1950)
);
const snapshot = await getDocs(q);
Realtime Database-এ এই ধরনের একাধিক শর্তে ফিল্টার করা সরাসরি সম্ভব না — সাধারণত সব ডেটা এনে JavaScript দিয়ে ফিল্টার করতে হয়, যা বড় ডেটাসেটে অদক্ষ হয়ে পড়ে।
তাহলে কোনটা বেছে নেবেন?
- Realtime Database বেছে নিন যদি — চ্যাট অ্যাপ, লাইভ কোলাবোরেশন, অনলাইন/অফলাইন প্রেজেন্স, অথবা সিম্পল ও দ্রুত রিয়েল-টাইম আপডেট দরকার হয়
- Firestore বেছে নিন যদি — জটিল কোয়েরি লাগবে, ডেটা স্ট্রাকচার্ড রাখতে চান, বড় স্কেলে যাওয়ার প্ল্যান আছে, অথবা ই-কমার্স/ব্লগ/CMS টাইপ অ্যাপ বানাচ্ছেন
এই সিরিজে আমরা যা করব: যেহেতু ArifStack-এর প্রজেক্টগুলোতে (Pathok Ghar, CastFM) সবসময় Realtime Database ব্যবহার হয়েছে, আর এটা শেখার জন্যও সহজবোধ্য, তাই বাকি সিরিজে আমরা মূলত Realtime Database নিয়ে গভীরভাবে কাজ করব। তবে Firestore-এর ধারণাটা মাথায় রাখলে ভবিষ্যতে বড় প্রজেক্টে সিদ্ধান্ত নিতে সুবিধা হবে।
ইন্টারেক্টিভ — কোন ডেটাবেজ কোন কাজের জন্য?
নিচে কিছু বাস্তব প্রজেক্ট আইডিয়া দেওয়া আছে — ক্লিক করে দেখো কোনটার জন্য কোন ডেটাবেজ বেশি মানানসই।
নিজে চেষ্টা করো
Exercise:
- Firebase Console-এ গিয়ে দুটো অপশনই দেখো — Build → Realtime Database আর Build → Firestore Database। দুটোর সেটআপ স্ক্রিন কেমন আলাদা লক্ষ করো।
- নিজের একটা প্রজেক্ট আইডিয়া (যেমন Todo App) নিয়ে চিন্তা করো — সেটার জন্য কোন ডেটাবেজ বেশি মানানসই হবে, আর কেন — এক প্যারাগ্রাফে লেখো।
- উপরের JSON স্ট্রাকচার দুটো (RTDB-এর ট্রি বনাম Firestore-এর Collection/Document) কাগজে এঁকে পার্থক্যটা নিজের ভাষায় ব্যাখ্যা করো।
পরের পর্বে যা থাকছে
পরের পর্ব থেকে আমরা হাতেকলমে Realtime Database নিয়ে কাজ শুরু করব — Database তৈরি, JSON স্ট্রাকচার ডিজাইন করা, আর বেসিক Security Rules লেখা।