Firebase Firestore হল মোবাইল এবং ওয়েব অ্যাপ্লিকেশনের জন্য স্বয়ংক্রিয় রিয়েল-টাইম সিঙ্ক্রোনাইজেশন সহ Google-এর একটি নমনীয় NoSQL ডকুমেন্ট ডেটাবেস। ডেটা কালেকশন এবং ডকুমেন্ট আকারে সংরক্ষিত হয়, প্রতিটিতে নির্বিচার কাঠামোর ফিল্ডের একটি সেট থাকে। Google, 2026 অনুসারে, Firestore স্বয়ংক্রিয় ফেইলওভার রিকভারি সহ মাল্টি-রিজিওনাল রেপ্লিকেশন সমর্থন করে। SDK 100 মিলিসেকেন্ডের কম লেটেন্সি সহ WebSocket সংযোগের মাধ্যমে সার্ভারে পরিবর্তন পাঠায়।
মূল বিষয়
Firebase Firestore হল একটি ক্লাউড NoSQL ডেটাবেস যা Google 2019 সালে Realtime Database-এর উত্তরসূরি হিসেবে চালু করেছে। Firestore Google Cloud Spanner এবং Google Cloud Datastore ইনফ্রাস্ট্রাকচারের উপর নির্মিত, যা একটি একক ট্রানজেকশনের মধ্যে শক্তিশালী ডেটা কনসিস্টেন্সি এবং স্বয়ংক্রিয় মাল্টি-রিজিওনাল রেপ্লিকেশন প্রদান করে। SDK Android, iOS, Web (JavaScript), Flutter, Kotlin Multiplatform এবং Unity সমর্থন করে।
Firestore ঘোষণা করা হয়েছিল Google I/O 2017-এ “Cloud Firestore” হিসেবে — একটি সমাধান যা Realtime Database-এর মূল সীমাবদ্ধতাগুলি সমাধান করে: জটিল কোয়েরি সমর্থনের অভাব, একাধিক নোড জুড়ে ডেটা স্কেল করতে অক্ষমতা এবং দুর্বল কনসিস্টেন্সি। Google (2026) অনুসারে, Firestore প্রতিদিন 1 ট্রিলিয়নেরও বেশি অনুরোধ প্রক্রিয়া করে এবং 80% নতুন Firebase প্রজেক্টের জন্য ডিফল্ট ডেটাবেস। তবে, Realtime Database তার সরল JSON কাঠামোর কারণে আল্ট্রা-লো লেটেন্সি পরিস্থিতিতে (গেমিং, সহযোগিতামূলক সম্পাদনা) প্রাসঙ্গিক রয়ে গেছে।
Firestore Spark প্ল্যানে উদার বিনামূল্যের সীমা সহ পে-এজ-ইউ-গো মডেলে অফার করা হয়: 1 GB স্টোরেজ, প্রতি মাসে 10 GB নেটওয়ার্ক ট্রাফিক, প্রতিদিন 50 হাজার রিড অপারেশন, 20 হাজার রাইট অপারেশন এবং 20 হাজার ডিলিট অপারেশন। Blaze প্ল্যানে, উপরের সবকিছুই বিনামূল্যে, এবং অতিরিক্ত ব্যবহারের জন্য চার্জ করা হয়: $0.06 প্রতি 100 হাজার রিড অপারেশন, $0.18 প্রতি 100 হাজার রাইট অপারেশন। Google (2026) অনুসারে, 90% প্রজেক্ট বিনামূল্যের সীমার মধ্যে থাকে।
Firestore-এর ডেটা মডেল শ্রেণীবদ্ধভাবে সংগঠিত: রুটে কালেকশন থাকে, প্রতিটি কালেকশনে ডকুমেন্ট থাকে, প্রতিটি ডকুমেন্টে ফিল্ড (প্রিমিটিভ টাইপ, অ্যারে, Map) এবং নেস্টেড কালেকশন (সাবকালেকশন) থাকে। কালেকশনের নেস্টিং গভীরতা সীমাহীন, কিন্তু একটি ডকুমেন্ট সরাসরি অন্য ডকুমেন্ট ধারণ করতে পারে না — শুধুমাত্র রেফারেন্স (Reference টাইপ) এর মাধ্যমে।
কালেকশন হল স্বয়ংক্রিয়ভাবে জেনারেটেড বা ব্যবহারকারী-সংজ্ঞায়িত আইডেন্টিফায়ার সহ ডকুমেন্টের একটি কন্টেইনার। প্রতিটি ডকুমেন্ট 1 MiB পর্যন্ত আকারের JSON-সদৃশ অবজেক্ট। ডকুমেন্ট ফিল্ড স্ট্রিং, নাম্বার, বুলিয়ান ভ্যালু, অ্যারে, Map, টাইমস্ট্যাম্প (Timestamp), জিওপয়েন্ট (GeoPoint) এবং অন্যান্য ডকুমেন্টের রেফারেন্স (Reference) হতে পারে। ডকুমেন্টের আকার সমস্ত ফিল্ড নাম সহ 1 MiB-তে সীমাবদ্ধ।
| Firestore ফিল্ড টাইপ | উদাহরণ | ইনডেক্সকৃত |
|---|---|---|
| String | “user@example.com” | হ্যাঁ |
| Number | 42, 3.14 | হ্যাঁ |
| Boolean | true, false | হ্যাঁ |
| Array | [1, 2, 3] | শুধুমাত্র contains |
| Map | {“nested”: “value”} | হ্যাঁ (কী দ্বারা) |
| Timestamp | 2026-07-03T12:00:00Z | হ্যাঁ |
| Reference | users/user123 | হ্যাঁ |
Firestore ডেটাবেস স্তরে পারমাণবিক ট্রানজেকশন সমর্থন করে। একটি ট্রানজেকশন একাধিক ডকুমেন্ট পড়তে এবং লিখতে পারে — Commit পারমাণবিকভাবে সমস্ত পরিবর্তন প্রয়োগ করে বা কিছুই না। প্রতি ট্রানজেকশনে সর্বোচ্চ 500 অপারেশন, 60 সেকেন্ডের টাইমআউট। ব্যাচ রাইট হল একটি নন-ট্রানজেকশনাল পারমাণবিক রাইট অপারেশন যা রিড ফেজ ছাড়া। আর্থিক লেনদেন, সিট বুকিং এবং ইনভেন্টরি ম্যানেজমেন্টের জন্য ট্রানজেকশন গুরুত্বপূর্ণ।
Firestore এবং Realtime Database-এর মধ্যে নির্বাচন প্রজেক্টের প্রয়োজনীয়তার উপর নির্ভর করে। উভয় ডেটাবেস Firebase ইকোসিস্টেমের অংশ, রিয়েল-টাইম সিঙ্ক্রোনাইজেশন প্রদান করে এবং সমস্ত প্ল্যাটফর্মে উপলব্ধ, তবে ডেটা মডেল, স্কেলিং এবং মূল্য নির্ধারণে মৌলিকভাবে ভিন্ন।
Realtime Database ডেটা একটি একক JSON ট্রিতে সংরক্ষণ করে, যা সরল কাঠামোর জন্য সুবিধাজনক কিন্তু 3 স্তরের বেশি গভীর নেস্টিংয়ের সাথে স্কেলিং কঠিন করে তোলে। Firestore স্বয়ংক্রিয় শার্ডিং সহ কালেকশন-ডকুমেন্ট মডেল ব্যবহার করে, যা কর্মক্ষমতা হ্রাস ছাড়াই লক্ষ লক্ষ ডকুমেন্টে স্কেল করতে দেয়। Google (2026) অনুসারে, Firestore গতি হ্রাস ছাড়াই একটি একক কালেকশনে 10 হাজার সমবর্তী সংযোগ সমর্থন করে, যখন Realtime Database একটি একক ইনস্ট্যান্সে 200 হাজার সংযোগ সমর্থন করে।
Realtime Database স্থানান্তরিত ডেটা (ডাউনলোড করা বাইট) এবং সমবর্তী সংযোগের সংখ্যার ভিত্তিতে বিল করা হয়। Firestore অপারেশনের সংখ্যা (রিড, রাইট, ডিলিট) ভিত্তিতে বিল করা হয়। ঘন ঘন ছোট আপডেট সহ অ্যাপ্লিকেশনের (চ্যাট, নোটিফিকেশন) জন্য, Firestore সাধারণত বেশি খরচ-কার্যকর — প্রতিটি রাইট অপারেশনের ডেটা আকার নির্বিশেষে নির্দিষ্ট মূল্য রয়েছে। বড় ডেটা ভলিউমের বিরল রিড সহ অ্যাপ্লিকেশনের জন্য, Realtime Database সস্তা হতে পারে।
Google-এর সুপারিশ (2026): নতুন প্রজেক্টের জন্য Firestore ডিফল্ট ডেটাবেস হিসেবে ব্যবহার করুন, এবং Realtime Database গেম এবং অ্যাপ্লিকেশনের জন্য যেখানে ন্যূনতম লেটেন্সি (50 ms-এর কম) এবং ফ্ল্যাট ডেটা কাঠামো গুরুত্বপূর্ণ। উভয় ডেটাবেস একই প্রজেক্টে একসাথে কাজ করতে পারে।
Firestore কোয়েরি ফিল্টারিং, সর্টিং এবং সীমা সহ কালেকশন বা কালেকশন গ্রুপের বিরুদ্ধে কার্যকর করা হয়। Realtime Database-এর বিপরীতে, যেখানে প্রতিটি কোয়েরি ক্লায়েন্ট-সাইড ফিল্টারিং সহ সম্পূর্ণ JSON ট্রি ট্রাভার্স করে, Firestore পূর্ব-নির্মিত ইনডেক্স ব্যবহার করে সার্ভারে সমস্ত কোয়েরি নির্বাহ করে। এটি গ্যারান্টি দেয় যে কোয়েরি জটিলতা শুধুমাত্র ফলাফলের আকারের উপর নির্ভর করে, কালেকশনের আকারের উপর নয়।
Firestore সমর্থন করে এক বা একাধিক ফিল্ড দ্বারা ফিল্টারিং (সমতা, রেঞ্জ, in, array-contains, array-contains-any), আরোহী এবং অবরোহী সর্টিং, সীমা এবং পেজিনেশনের জন্য কার্সার। সীমাবদ্ধতা: বিভিন্ন ফিল্ডে ফিল্টারিং সহ যৌগিক কোয়েরি (where price > 10 AND where category == “books”) একটি যৌগিক ইনডেক্স প্রয়োজন; OR কোয়েরি নিষিদ্ধ (পরিবর্তে in এবং array-contains-any ব্যবহার করুন), এবং বিভিন্ন ফিল্ডে অসমতা কোয়েরি অনুমোদিত নয়।
data class Product(
val name: String = "",
val category: String = "",
val price: Double = 0.0,
val inStock: Boolean = false
)
suspend fun FirestoreRepository.queryProducts(): List<Product> {
return firestore
.collection("products")
.whereEqualTo("category", "electronics")
.whereGreaterThanOrEqualTo("price", 100.0)
.whereLessThan("price", 500.0)
.orderBy("price")
.limit(20)
.get()
.await()
.toObjects(Product::class.java)
}
Firestore স্বয়ংক্রিয়ভাবে একক ফিল্ডের জন্য ইনডেক্স তৈরি করে — একক-ফিল্ড কোয়েরি কোনো কনফিগারেশন ছাড়াই কাজ করে। দুই বা ততোধিক ফিল্ড সহ কোয়েরির জন্য (ফিল্টারিং + সর্টিং), যৌগিক ইনডেক্স প্রয়োজন। যখন একটি কোয়েরি প্রথমবার পাঠানো হয়, Firestore কনসোলের লিঙ্ক সহ একটি ত্রুটি ফেরত দেয় যেখানে এক ক্লিকে ইনডেক্স তৈরি করা যায়। প্রতি ডেটাবেসে সর্বোচ্চ 200 যৌগিক ইনডেক্স। Firebase CLI-এর মাধ্যমে ইনডেক্স এক্সপোর্ট এবং ইম্পোর্ট করা যায়।
Android অ্যাপে Firestore সংযোগ Firebase BOM-এর মাধ্যমে মানকভাবে করা হয়। firebase-firestore-ktx ডিপেন্ডেন্সি যোগ করার পর, FirebaseFirestore অবজেক্ট getInstance()-এর মাধ্যমে উপলব্ধ হয় — অতিরিক্ত কী বা টোকেন ছাড়াই। Firestore অন্যান্য সার্ভিসের মতো একই Firebase প্রজেক্ট ব্যবহার করে।
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-firestore-ktx")
}
// ইনিশিয়ালাইজেশন
val db = FirebaseFirestore.getInstance()
Firestore দুটি রিড মোড প্রদান করে: একবার (get) এবং রিয়েল-টাইম (addSnapshotListener)। একবার রিড একবার একটি ডকুমেন্ট পুনরুদ্ধার করে — সেটিংস এবং কনফিগারেশনের জন্য উপযোগী। একটি লিসনার পরিবর্তনের সাবস্ক্রাইব করে — যেকোনো ডকুমেন্ট আপডেট স্বয়ংক্রিয়ভাবে সমস্ত সংযুক্ত ক্লায়েন্টকে রিয়েল টাইমে আপডেটেড ডেটা সরবরাহ করে। set() একটি ডকুমেন্ট তৈরি বা ওভাররাইট করে, update() সম্পূর্ণ ডকুমেন্ট ওভাররাইট না করে শুধুমাত্র নির্দিষ্ট ফিল্ড পরিবর্তন করে।
Google (2026) অনুসারে, রিয়েল-টাইম Firestore সহ মাঝারি আকারের অ্যাপ্লিকেশন (100 হাজার DAU) প্রতি মাসে প্রায় 5-10 GB আউটগোয়িং ট্রাফিক খরচ করে। অফলাইন ক্যাশে (Persistence Cache) ব্যবহার বারবার ডাউনলোড 60-70% কমায়, কারণ SDK সংযোগ পুনরুদ্ধার হলে শুধুমাত্র পরিবর্তিত ডকুমেন্ট লোড করে।
Persistence Cache ইন্টারনেট অ্যাক্সেস ছাড়া কাজ করার জন্য একটি অন্তর্নির্মিত Firestore প্রক্রিয়া। SDK স্বয়ংক্রিয়ভাবে ডিভাইসে সমস্ত পঠিত ডকুমেন্ট ক্যাশে করে (Android-এ 500 MiB পর্যন্ত)। সংযোগ হারিয়ে গেলে, রিড ক্যাশে থেকে চলতে থাকে এবং রাইটগুলি সারিবদ্ধ হয়। সংযোগ পুনরুদ্ধার হলে, সমস্ত মুলতুবি অপারেশন সার্ভারে পাঠানো হয় এবং ক্যাশে সার্ভারের সাথে সিঙ্ক্রোনাইজ হয়। দ্বন্দ্ব নিয়ন্ত্রণের জন্য, snapshot-metadata.hasPendingWrites এবং setOptions(ServerTimestampBehavior) ব্যবহার করুন।
Security Rules হল Firestore-এর জন্য একটি ঘোষণামূলক অ্যাক্সেস কন্ট্রোল ভাষা যা প্রতিটি রিড বা রাইট অপারেশনের আগে Google-এর সার্ভারে নির্বাহিত হয়। Rules-এর সার্ভার-সাইড কোডের প্রয়োজন নেই — এগুলি Firebase কনসোল বা Firebase CLI-এর মাধ্যমে লেখা হয় এবং Git-এর মাধ্যমে সংস্করণভুক্ত করা হয়। প্রতিটি অপারেশন Rules-এর বিরুদ্ধে পরীক্ষা করা হয় এবং লঙ্ঘনে PERMISSION_DENIED ত্রুটি ফেরত দেওয়া হয়।
Firestore Security Rules match ব্লক এবং allow এক্সপ্রেশন নিয়ে গঠিত। match একটি কালেকশন বা ডকুমেন্টের পাথ নির্ধারণ করে, allow অনুমোদিত অপারেশন (read, write, create, update, delete) এবং একটি শর্ত নির্দিষ্ট করে — boolean ফেরত দেওয়া JavaScript-সদৃশ এক্সপ্রেশন। Rules প্রমাণীকরণ (request.auth), অনুরোধ ডেটা (request.resource.data), বিদ্যমান ডেটা (resource.data), সময় (request.time) এবং পাথ (request.path) পরীক্ষা করতে পারে।
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if request.auth != null;
allow write: if request.auth.uid == userId;
}
match /products/{productId} {
allow read: if true;
allow create: if request.auth.token.role == "admin";
allow update: if resource.data.authorId == request.auth.uid;
}
}
}
Security Rules সার্ভার সাইডে টাইপ এবং ভ্যালু ভ্যালিডেশন সমর্থন করে। আপনি লিখতে নিষেধ করতে পারেন যদি মূল্য নেতিবাচক হয় বা নাম খালি থাকে। সমস্ত পরীক্ষা Google-এর সার্ভারে লেখার আগে করা হয় — এটি ক্লায়েন্ট (Android, iOS, Web, Admin SDK) নির্বিশেষে ডেটা কনসিস্টেন্সি নিশ্চিত করে। Rules দূষিত Admin SDK থেকে রক্ষা করে না — এটি ডিজাইন অনুসারে Rules বাইপাস করে। সম্পূর্ণ সুরক্ষার জন্য, Transaction Functions এবং Firebase Extensions ব্যবহার করুন।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Firestore ইনডেক্স এবং জটিল কোয়েরি সহ ডকুমেন্ট মডেল ব্যবহার করে। Realtime Database JSON ট্রিতে ডেটা সংরক্ষণ করে এবং কম লেটেন্সি প্রদান করে। নতুন প্রজেক্টের জন্য Firestore সুপারিশ করা হয়।
Firestore স্বয়ংক্রিয়ভাবে কালেকশন জুড়ে ডেটা শার্ড করে — রেপ্লিকেশন বা শার্ডিং কনফিগার করার প্রয়োজন নেই। ডেটাবেস একটি কালেকশনে লক্ষ লক্ষ ডকুমেন্ট এবং হাজার হাজার সমবর্তী সংযোগ অবনতি ছাড়াই পরিচালনা করে।
হ্যাঁ, Firebase Console ব্যবহার করুন — “Export to Firestore” বৈশিষ্ট্য কয়েক ক্লিকে Realtime Database-এর JSON কাঠামোকে Firestore কালেকশন এবং ডকুমেন্টে রূপান্তর করে। নেস্টেড নোড নেস্টেড কালেকশন হয়ে যায়।
Last write wins — ডিফল্টভাবে, Firestore সমবর্তী লেখার সময় দ্বন্দ্ব সমাধানের জন্য “শেষ লেখা জয়ী” নীতি ব্যবহার করে। কাস্টম হ্যান্ডলিংয়ের জন্য, পুনরায় পড়ার সাথে ট্রানজেকশন ব্যবহার করুন।
বিনামূল্যের সীমা Spark প্ল্যানের: 1 GB স্টোরেজ, প্রতিদিন 50 হাজার রিড অপারেশন এবং 20 হাজার রাইট অপারেশন। এটি MVP এবং কম ট্রাফিকযুক্ত অ্যাপ্লিকেশনের জন্য যথেষ্ট।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন