Firestore document model in GCP - Time & Space Complexity
We want to understand how the time to access or write data in Firestore changes as we add more documents.
Specifically, how does the number of documents affect the speed of operations?
Analyze the time complexity of reading and writing documents in Firestore.
// Firestore example
const docRef = firestore.collection('users').doc(userId);
// Write data to a document
await docRef.set({ name: 'Alice', age: 30 });
// Read data from a document
const docSnap = await docRef.get();
if (docSnap.exists) {
console.log(docSnap.data());
}
This sequence writes data to a single document and then reads it back.
Look at the main operations Firestore performs here.
- Primary operation: Reading or writing a single document by its ID.
- How many times: Once per document access.
Accessing a document by its ID takes about the same time no matter how many documents exist.
| Input Size (n) | Approx. API Calls/Operations |
|---|---|
| 10 | 1 read or write operation |
| 100 | 1 read or write operation |
| 1000 | 1 read or write operation |
Pattern observation: The time stays roughly the same regardless of the total number of documents.
Time Complexity: O(1)
This means accessing or writing a single document takes constant time, no matter how many documents are stored.
[X] Wrong: "Reading a document will take longer as the database grows because there are more documents to search through."
[OK] Correct: Firestore uses document IDs as keys, so it directly locates documents without scanning all documents.
Understanding how Firestore handles document access helps you explain efficient data retrieval in cloud databases.
This skill shows you know how cloud services manage data at scale.
"What if we query documents by a field value instead of by document ID? How would the time complexity change?"
Practice
Solution
Step 1: Understand Firestore data structure
Firestore organizes data into collections and documents, not tables or files.Step 2: Identify the smallest data unit
The smallest unit is a document, which holds fields and values.Final Answer:
A document -> Option BQuick Check:
Firestore stores data as documents [OK]
- Confusing documents with tables from SQL databases
- Thinking Firestore stores files like Cloud Storage
- Assuming buckets are data units in Firestore
Solution
Step 1: Recall JSON field syntax
JSON uses double quotes for keys and string values, separated by a colon.Step 2: Match Firestore document field style
Firestore documents resemble JSON, so the correct syntax is "key": "value".Final Answer:
"name": "Alice" -> Option AQuick Check:
Firestore fields use JSON syntax [OK]
- Using equals sign instead of colon
- Omitting quotes around keys or values
- Using arrow notation which is invalid
active == false?Solution
Step 1: Understand the data and filter condition
Documents have "active": true, but the query filters for active == false.Step 2: Evaluate query result
No documents match active == false, so the query returns no results.Final Answer:
No documents -> Option DQuick Check:
Filter matches no documents [OK]
- Assuming query returns all documents
- Expecting an error for valid filter
- Confusing true and false values
{name: "Bob", age: "twenty"}. What is the likely issue?Solution
Step 1: Check field name syntax
Firestore expects field names as strings in JSON, so keys must be quoted.Step 2: Analyze the given data
Keys are unquoted (name, age), which is invalid JSON syntax for Firestore.Final Answer:
Field names must be in quotes -> Option CQuick Check:
Field names need quotes in Firestore JSON [OK]
- Thinking Firestore auto-corrects missing quotes
- Assuming string values for numbers cause errors
- Believing document ID is mandatory in data
Solution
Step 1: Consider Firestore best practices for related data
Large or growing lists like comments should be in subcollections, not arrays, for scalability.Step 2: Evaluate options for organizing posts and comments
Using a 'posts' collection with 'comments' subcollections keeps data organized and efficient.Final Answer:
Create a 'posts' collection with documents for each post, and a subcollection 'comments' inside each post document -> Option AQuick Check:
Use subcollections for related many items [OK]
- Putting all comments in one array causing size limits
- Using a flat collection losing post-comment grouping
- Referencing post ID without subcollections complicates queries
Ready to prove it?
Pass the test and this pattern moves unknown
