Write concern and data durability in MongoDB - Time & Space Complexity
When we use write concern in MongoDB, it controls how many servers confirm a write before we consider it done.
We want to understand how this affects the time it takes to complete a write as data grows.
Analyze the time complexity of this MongoDB write with write concern.
db.collection.insertOne(
{ name: "Alice", age: 30 },
{ writeConcern: { w: 3, wtimeout: 5000 } }
)
This code writes one document and waits for confirmation from 3 servers or times out after 5 seconds.
Look at what repeats when confirming the write.
- Primary operation: Waiting for acknowledgments from multiple servers.
- How many times: Equal to the number of servers specified by
w(here, 3 times).
As the number of servers to confirm increases, the time to complete the write grows roughly in a straight line.
| Number of Servers (w) | Approx. Confirmation Steps |
|---|---|
| 1 | 1 confirmation |
| 3 | 3 confirmations |
| 10 | 10 confirmations |
Pattern observation: More servers to confirm means more waiting steps, growing linearly.
Time Complexity: O(w)
This means the time to finish a write grows linearly with the number of servers that must confirm it.
[X] Wrong: "Waiting for more servers to confirm doesn't affect write time much."
[OK] Correct: Each additional server adds waiting time, so more confirmations mean longer write completion.
Understanding how write concern affects time helps you explain trade-offs between speed and safety in real systems.
"What if we change write concern from waiting for multiple servers to just one? How would the time complexity change?"
Practice
writeConcern option in MongoDB control?Solution
Step 1: Understand the role of write concern
Write concern tells MongoDB how to confirm that a write operation is saved and durable.Step 2: Differentiate from other options
It does not control data format, retrieval speed, or document size.Final Answer:
How MongoDB confirms that data is saved to the database -> Option AQuick Check:
Write concern = data save confirmation [OK]
- Confusing write concern with data format
- Thinking it controls read speed
- Assuming it limits document size
Solution
Step 1: Recall write concern values
w:1 means wait for acknowledgment from the primary node only.Step 2: Check other options
w:0 means no acknowledgment; w:'majority' waits for majority nodes; w:-1 is invalid.Final Answer:
{ writeConcern: { w: 1 } } -> Option DQuick Check:
w:1 = primary ack wait [OK]
- Using w:0 which means no acknowledgment
- Confusing 'majority' with primary only
- Using invalid negative values
db.collection.insertOne({name: 'Alice'}, {writeConcern: {w: 'majority', wtimeout: 5000}})What happens if the majority of nodes do not acknowledge the write within 5 seconds?
Solution
Step 1: Understand w:'majority' and wtimeout
The write waits for majority nodes to confirm within 5000 ms (5 seconds).Step 2: Outcome if timeout exceeded
If majority nodes don't respond in time, MongoDB returns a timeout error and the write is considered failed.Final Answer:
The write operation fails with a timeout error -> Option CQuick Check:
w:'majority' + wtimeout = fail if no timely ack [OK]
- Assuming write succeeds immediately
- Thinking MongoDB retries forever
- Ignoring write concern on timeout
db.collection.insertOne({item: 'book'}, {writeConcern: {w: 2, wtimeout: '3000'}})But it throws an error. What is the problem?
Solution
Step 1: Check writeConcern syntax
wtimeout expects a number (milliseconds), not a string.Step 2: Validate other parts
w:2 is valid if the replica set has at least 2 nodes; insertOne accepts writeConcern; 'item' field is valid.Final Answer:
wtimeout must be a number, not a string -> Option AQuick Check:
wtimeout type must be number [OK]
- Using string for wtimeout
- Thinking w:2 is invalid always
- Assuming insertOne disallows writeConcern
Solution
Step 1: Understand w and j options
w:3 means wait for acknowledgment from primary plus two secondaries (total 3 nodes). j:true means wait for write to be committed to journal (disk) on primary.Step 2: Check other options
B waits only for primary with journaling; C waits for majority but no journaling; D waits for 2 nodes but no journaling.Final Answer:
{ writeConcern: { w: 3, j: true } } -> Option BQuick Check:
w:3 + j:true = 3 nodes + disk write [OK]
- Ignoring journaling for durability
- Using w:'majority' without knowing node count
- Assuming w:2 means two secondaries only
Ready to prove it?
Pass the test and this pattern moves unknown
