Storage size calculations

This page describes the storage size of documents, fields, and index entries in Firestore with MongoDB compatibility.

You can learn about the costs of this storage at Firestore Enterprise edition pricing.

String size

String sizes are calculated as the number of UTF-8 encoded bytes + 1.

The following are stored as strings:

  • Collection name
  • Field names
  • String field values (including _id)

For example:

  • The collection name tasks uses 5 bytes + 1 byte, for a total of 6 bytes.
  • The field name description uses 11 bytes + 1 byte, for a total of 12 bytes.

Field value size

The following table shows the size of field values by type.

Type Size
Array The sum of the sizes of its values
Boolean 1 byte
Binary data Byte length + 1 for a non-generic (non-0) subtype
Date 8 bytes
Double 8 bytes
Double128 16 bytes
32-bit integer 4 bytes
64-bit integer (long) 8 bytes
Object The sum of the string sizes of each field name and the sizes of each field falue in the embedded object
Min Key 1 byte
Max Key 1 byte
Null 1 byte
Regular expression (Pattern length + 1) + (Options length + 1)
Timestamp 8 bytes
String Number of UTF-8 encoded bytes + 1

For example, a boolean field named done would use 6 bytes:

  • 5 bytes for the done field name
  • 1 byte for the boolean value

Document size

The size of a document is the sum of:

  • The string size of the collection name
  • The sum of the string size of each field name (except _id)
  • The sum of the size of each field value (including _id)
  • 48 additional bytes

This example is for a document in collection tasks:

{
  "_id": "my_task_id",
  "type": "Personal",
  "done": false,
  "priority": 1,
  "description": "Learn Cloud Firestore"
}

The total size of the fields is 78 bytes:

Field name and value Field size in bytes
"_id": "my_task_id" 11 for the field's string value
"type": "Personal" 14
5 for the field name + 9 for the field's string value
"done": false 6
5 for the field name + 1 for the field's boolean value
"priority": 1 17
9 for the field name + 4 for the field's 32-bit integer value
"description": "Learn Cloud Firestore" 34
12 for the field name + 22 for the field's string value

So the document size is 6 + 78 + 48 = 132 bytes:

  • 6 for the collection name
  • 78 bytes for the fields
  • 48 additional bytes

Index entry size

The size of an index entry in an index is the sum of:

  • The string size of the collection name
  • The size of the _id field value
  • The sum of the indexed field values
  • 48 additional bytes

Consider a document in the tasks collection:

{
  "_id": "my_task_id",
  "type": "Personal",
  "done": false,
  "priority": 1,
  "description": "Learn Cloud Firestore"
}

For an index on the done and priority fields (both ascending), the total size of the index entry in this index is 70 bytes:

  • 6 bytes for the collection name tasks
  • 11 bytes for the _id field value
  • 1 byte for the boolean field value
  • 4 bytes for the 32-bit integer field value
  • 48 additional bytes

For sparse indexes, if a document doesn't include any of the fields, then no index entry is created. If a document contains at least one of the indexed fields, an index entry is created with absent indexed fields set to NULL.

What's next

Learn about Firestore Enterprise edition pricing.