Realtime Database vs Firestore decision in Firebase - Performance Comparison
When choosing between Firebase Realtime Database and Firestore, it's important to understand how their operation costs grow as your data or users increase.
We want to see how the number of database calls changes when reading or writing data.
Analyze the time complexity of reading a list of user messages from each database.
// Realtime Database
const messagesRef = firebase.database().ref('messages');
messagesRef.once('value').then(snapshot => {
const messages = snapshot.val();
// process messages
});
// Firestore
const messagesCollection = firebase.firestore().collection('messages');
messagesCollection.get().then(querySnapshot => {
querySnapshot.forEach(doc => {
const message = doc.data();
// process message
});
});
This code reads all messages once from each database type to process them.
Look at what happens repeatedly when reading data.
- Primary operation: Reading each message record from the database.
- How many times: Once per message in the list.
As the number of messages grows, the number of read operations grows too.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 10 | 1 read |
| 100 | 1 read |
| 1000 | 1 read |
Pattern observation: The number of operations grows directly with the number of messages.
Time Complexity: O(n)
This means the time to read all messages grows linearly with how many messages there are.
[X] Wrong: "Reading a large list from Firestore or Realtime Database is always a single operation regardless of size."
[OK] Correct: Each message is a separate read operation, so more messages mean more reads and longer time.
Understanding how database reads scale helps you design apps that stay fast as they grow. This skill shows you can think about real-world app performance.
"What if we used Firestore queries to limit results instead of reading all messages? How would the time complexity change?"
Practice
Solution
Step 1: Understand data structure of Realtime Database
Realtime Database stores data as a JSON tree, which is simple and fast for syncing.Step 2: Compare with Firestore
Firestore uses collections and documents, better for complex queries but not just simple JSON tree syncing.Final Answer:
Realtime Database -> Option AQuick Check:
Simple JSON tree sync = Realtime Database [OK]
- Confusing Firestore with Realtime Database
- Choosing Cloud Storage for database needs
- Thinking Firebase Hosting stores data
Solution
Step 1: Recall Firestore document reference syntax
Firestore uses collection().doc() to reference documents.Step 2: Identify incorrect options
db.ref() is Realtime Database syntax; db.get() and db.store() are invalid here.Final Answer:
db.collection('users').doc('user1') -> Option BQuick Check:
Firestore document ref = collection().doc() [OK]
- Using Realtime Database syntax for Firestore
- Mixing method names like get() or store()
- Confusing document and collection references
db.collection('users').where('age', '>', 22).get().then(snapshot => {
let result = [];
snapshot.forEach(doc => result.push(doc.data().age));
console.log(result);
});Solution
Step 1: Understand the query condition
The query filters users where age is greater than 22, so ages 25 and 30 qualify.Step 2: Determine the output array
The code collects ages from matching documents, so output is [25, 30].Final Answer:
[25, 30] -> Option AQuick Check:
age > 22 = [25, 30] [OK]
- Including 20 which is not > 22
- Confusing >= with > operator
- Assuming empty result without checking data
firebase.database().collection('users').doc('user1').get()What is the main issue?
Solution
Step 1: Identify API mismatch
Realtime Database uses ref() instead of collection() and doc(), which are Firestore methods.Step 2: Confirm correct method usage
Using collection() and doc() on Realtime Database causes error because those methods don't exist there.Final Answer:
Realtime Database does not have collection() or doc() methods -> Option CQuick Check:
Realtime DB uses ref(), not collection()/doc() [OK]
- Assuming get() needs await causes confusion
- Blaming authentication without checking API
- Thinking database URL causes this syntax error
Solution
Step 1: Analyze app requirements
The chat app needs fast real-time updates and a simple data structure.Step 2: Match requirements to database features
Realtime Database syncs data instantly as a JSON tree, ideal for simple real-time apps.Step 3: Eliminate incorrect options
Firestore supports complex queries and scales well but is more complex; Realtime Database does not use collections/documents.Final Answer:
Realtime Database, because it syncs data instantly as a JSON tree -> Option DQuick Check:
Simple real-time chat = Realtime Database [OK]
- Choosing Firestore for simple real-time needs
- Confusing data structure of Realtime Database
- Assuming Realtime Database uses collections/documents
Ready to prove it?
Pass the test and this pattern moves unknown
