Realtime Database 250KB write limit: does it apply per path in a multi-path update or to the whole payload
0 reputation · 21 Jul 2026, 19:26 UTC
0 reputation · 21 Jul 2026, 19:26 UTC
I am designing a data layer on Firebase Realtime Database that fans out one logical change across several locations using a single multi-path update (an atomic update() call with multiple paths). I need to understand exactly how the documented 256MB database / per-write size constraints apply so I can decide whether to split large updates into multiple calls.
The documentation describes a maximum size for an individual write operation (commonly cited around 256MB total stored data and a per-write payload ceiling in the hundreds of KB range). What is unclear to me is how that ceiling is evaluated for a multi-path update: is the limit checked against the serialized size of the entire update map, or per individual path value? I also want to know how this interacts with the documented per-connection write rate, since splitting one atomic update into several writes would sacrifice atomicity.
update(), is the write size limit enforced on the combined payload or on each path's value separately?The write size limit applies to the combined serialized payload of the entire request. In a multi-path update() call, the limit is checked against the total size of the update map, not against each individual path value separately.
Because a multi-path update is processed as a single atomic operation, the database engine evaluates the entire request packet. If the aggregate size of all paths and values in your update exceeds the threshold, the operation will fail.
If the combined payload exceeds the limit, the entire update fails atomically. No partial updates are applied to the database. From a client-side perspective, this typically manifests as a failed promise or an error callback, often returning a generic internal server error or a permission-related failure depending on the SDK version and the specific point of rejection.
| Variable | Behavior |
|---|---|
| SDK Type | Consistent across Client SDKs and the Admin SDK; the limit is enforced server-side. |
| Pricing Plan | The limit is a technical engine constraint and does not differ between Spark and Blaze plans. |
If you find your fan-out logic regularly hitting this ceiling, you face a trade-off between atomicity and capacity:
update() into several smaller calls avoids the payload limit but sacrifices atomicity. If the connection drops mid-sequence, your data layer will be in an inconsistent state (partial fan-out).To verify your specific data shapes against this limit, you can use these scoped tests:
Diagnostic Detail Needed: To provide a more specific recommendation on splitting writes, are you using a Cloud Function for this fan-out, or is this happening directly on the client side?
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.