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

FeatureCloud FirestoreRealtime Database
Data ModelDocuments & CollectionsJSON tree
QueriesRich query supportLimited query support
Offline Support✅ Full offline support✅ Basic offline support
ScalabilityScales automaticallyScales with sharding (complex)
PricingPer read/write/deletePer GB downloaded
Real-time Updates✅ Yes✅ Yes (lower latency)
Security RulesField-level rulesNode-level rules
Multi-region✅ Supported❌ Single region
StatusRecommended (newer)Legacy (older)

Cloud Firestore

Firestore stores data as documents inside collections. Documents can contain subcollections, allowing hierarchical data.

Data Structure

text
users (collection)
  └── user_001 (document)
        ├── name: "Alice"
        ├── email: "alice@example.com"
        └── orders (subcollection)
              └── order_01
                    ├── item: "Book"
                    └── price: 300

Flutter Usage

dart
import '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

dart
import '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 CaseRecommendation
New Firebase projectFirestore (always prefer)
Complex queries with filtersFirestore
Large-scale appFirestore
Simple real-time chat or live scoresRealtime Database
Live collaborative features (cursors, typing indicators)Realtime Database
Offline-first appsFirestore

Pricing Difference

OperationFirestoreRealtime Database
Cost modelPer document read/writePer GB transferred
Free tier50K reads, 20K writes/day1 GB storage, 10 GB/month transfer
Better forMany small recordsLarge 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