What is the difference between firestore database and realtime database in firebase ?
#database#firebase
Answer
Overview
Firebase offers two cloud database options: Cloud Firestore and the Realtime Database. Both are NoSQL databases that sync data in real-time, but they differ significantly in structure, performance, and capabilities.
Quick Comparison
| Feature | Cloud Firestore | Realtime Database |
|---|---|---|
| Data Model | Documents & Collections | JSON tree |
| Queries | Rich query support | Limited query support |
| Offline Support | ✅ Full offline support | ✅ Basic offline support |
| Scalability | Scales automatically | Scales with sharding (complex) |
| Pricing | Per read/write/delete | Per GB downloaded |
| Real-time Updates | ✅ Yes | ✅ Yes (lower latency) |
| Security Rules | Field-level rules | Node-level rules |
| Multi-region | ✅ Supported | ❌ Single region |
| Status | Recommended (newer) | Legacy (older) |
Cloud Firestore
Firestore stores data as documents inside collections. Documents can contain subcollections, allowing hierarchical data.
Data Structure
textusers (collection) └── user_001 (document) ├── name: "Alice" ├── email: "alice@example.com" └── orders (subcollection) └── order_01 ├── item: "Book" └── price: 300
Flutter Usage
dartimport 'package:cloud_firestore/cloud_firestore.dart'; final db = FirebaseFirestore.instance; // Add a document await db.collection('users').doc('user_001').set({ 'name': 'Alice', 'email': 'alice@example.com', 'createdAt': FieldValue.serverTimestamp(), }); // Rich query with filters and ordering final snapshot = await db .collection('users') .where('age', isGreaterThan: 18) .orderBy('name') .limit(10) .get(); // Real-time stream db.collection('users').snapshots().listen((snapshot) { for (var doc in snapshot.docs) { print(doc.data()); } });
Firestore Pros
- ✅ Rich query capabilities (filters, ordering, pagination)
- ✅ Scales to very large data sets
- ✅ Multi-region availability
- ✅ Better security rules (field-level)
- ✅ Strong offline support
Realtime Database
Realtime Database stores data as a single, large JSON tree. All data exists in one flat structure.
Data Structure
json{ "users": { "user_001": { "name": "Alice", "email": "alice@example.com" } }, "messages": { "msg_001": { "text": "Hello!", "userId": "user_001" } } }
Flutter Usage
dartimport 'package:firebase_database/firebase_database.dart'; final db = FirebaseDatabase.instance; // Write data await db.ref('users/user_001').set({ 'name': 'Alice', 'email': 'alice@example.com', }); // Read data once final snapshot = await db.ref('users/user_001').get(); print(snapshot.value); // Real-time listener db.ref('messages').onValue.listen((event) { print(event.snapshot.value); });
Realtime Database Pros
- ✅ Lower latency for simple data
- ✅ Simpler structure for basic use cases
- ✅ Better for frequent, small data updates (e.g., live cursor positions)
- ✅ Cheaper for high-volume small reads
When to Use Which?
| Use Case | Recommendation |
|---|---|
| New Firebase project | Firestore (always prefer) |
| Complex queries with filters | Firestore |
| Large-scale app | Firestore |
| Simple real-time chat or live scores | Realtime Database |
| Live collaborative features (cursors, typing indicators) | Realtime Database |
| Offline-first apps | Firestore |
Pricing Difference
| Operation | Firestore | Realtime Database |
|---|---|---|
| Cost model | Per document read/write | Per GB transferred |
| Free tier | 50K reads, 20K writes/day | 1 GB storage, 10 GB/month transfer |
| Better for | Many small records | Large binary data transfers |
Recommendation: For any new Flutter project, use Cloud Firestore. It is more powerful, scalable, and officially recommended by Google. Use Realtime Database only if you have a specific use case like very low-latency live collaboration features.
Learn more: Firebase - Choose a Database