Размер хранилища

На этой странице описан размер хранилища документов, полей и записей индекса в Cloud Firestore.

Узнать о стоимости такого хранилища можно на странице Цены.

Размер строки

Размер строки рассчитывается как количество байтов в кодировке UTF-8 + 1.

В виде строк хранятся следующие данные:

  • Название подборки
  • Названия полей
  • Значения строковых полей (включая _id)

Пример:

  • Название коллекции tasks занимает 5 байт + 1 байт, то есть всего 6 байт.
  • Название поля description занимает 11 байт + 1 байт, итого 12 байт.

Размер значения поля

В таблице ниже указаны размеры значений полей по типам.

Тип Размер
Массив Сумма размеров значений.
Логическое значение 1 байт
Двоичные данные Длина в байтах + 1 для необобщенного (не 0) подтипа.
Дата 8 байт
Двуспальная 8 байт
Double128 16 байт
32-битное целое число 4 байта
64-битное целое число (long) 8 байт
Объект Сумма размеров строк каждого названия поля и размеров каждого значения поля во встроенном объекте.
Минимальный ключ 1 байт
Ключ Max 1 байт
Null 1 байт
Регулярное выражение (длина шаблона + 1) + (длина параметров + 1)
Временная метка 8 байт
Строка Количество байтов в кодировке UTF-8 + 1

Например, логическое поле done будет занимать 6 байт:

  • 5 байт для названия поля done;
  • 1 байт для логического значения;

Размер документа

Размер документа – это сумма следующих значений:

Пример для документа в коллекции tasks:

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

Общий размер полей составляет 78 байт:

Название и значение поля Размер поля в байтах
"_id": "my_task_id" 11 – для строкового значения поля;
"type": "Personal" 14
5 за название поля + 9 за строковое значение поля
"done": false 6
5 для названия поля + 1 для логического значения поля
"priority": 1 17
9 для названия поля + 4 для 32-битного целочисленного значения поля
"description": "Learn Cloud Firestore" 34
12 для названия поля + 22 для строкового значения поля

Таким образом, размер документа составляет 6 + 78 + 48 = 132 байта:

  • 6 за название коллекции
  • 78 байт для полей;
  • 48 дополнительных байтов

Размер записи индекса

Размер записи в индексе равен сумме следующих значений:

Рассмотрим документ в коллекции tasks:

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

Для индекса по полям done и priority (оба по возрастанию) общий размер записи в этом индексе составляет 70 байт:

  • 6 байт для названия коллекции tasks;
  • 11 байт для значения поля _id;
  • 1 байт для логического значения поля;
  • 4 байта для значения 32-битного целочисленного поля;
  • 48 дополнительных байтов

Для разреженных индексов, если документ не включает ни одного из полей, то запись индекса не создается. Если в документе есть хотя бы одно из индексируемых полей, создается запись индекса, в которой отсутствующим индексируемым полям присваивается значение NULL.

Размер записи о событии в потоке изменений

Размер события в потоке изменений – это сумма следующих значений:

  • Сумма размеров строк названий коллекций, умноженная на два.
  • Для событий вставки и обновления документа:
    • Сумма размеров строк для каждого названия поля в fullDocument или updateDescription (кроме _id).
    • Сумма размеров каждого значения поля в fullDocument или updateDescription. (включая _id).
  • Если применимо к транзакциям с несколькими документами, дополнительные 24 байта для lsid и txnNumber.
  • 92 дополнительных байта

Рассмотрим пример события вставки для документа в коллекции задач:

{
  "_id": { <Resume Token> },
  "operationType": "insert",
  "clusterTime": <Timestamp>,
  "wallTime": <ISODate>,
  "ns": {
     "db": "db",
     "coll": "tasks"
  },
  "documentKey": {
     "_id": "my_task_id"
  },
  "fullDocument": {
     "_id": "my_task_id",
     "description": "Learn Cloud Firestore"
  },
}

Общий размер события в потоке изменений составляет 149 байт:

  • 92 байта для общих метаданных;
  • 12 байт на основе названия коллекции tasks (6 байт) * 2
  • 11 байт для значения поля _id;
  • 12 байт для названия поля description;
  • 22 байта для значения поля description;

Размер записи в индексе текстового поиска

Размер записи в индексе текстового поиска равен сумме следующих значений:

  • Размер строки названия подборки
  • Размер значения _id
  • Сумма байтов из значений индексированных полей (x2)
  • 48 дополнительных байтов для общих метаданных.

Рассмотрим пример события вставки для документа с _id my_task_id в коллекции tasks:

{
    "_id": "my_place",
     "type": "Restaurant",
     "visited": false,
     "priority": 1,
     "location": GeoPoint(longitude, latitude)
}

Общий размер записи в индексе текстового поиска на description составляет 105 байт. Он рассчитывается следующим образом:

  • 6 байт для названия коллекции tasks;
  • 11 байт для значения _id;
  • 44 байта (22 байта для поля description x 2)
  • 48 дополнительных байтов для общих метаданных.

Размер записи геопространственного индекса

Размер записи геопространственного индекса в индексе равен сумме следующих значений:

  • Размер строки названия подборки
  • Размер значения _id
  • 128 байт для каждой проиндексированной геопозиции.
  • 48 дополнительных байтов для общих метаданных.

Рассмотрим пример события вставки для документа с _id my_place в коллекции places:

{
    "_id": "my_place",
     "type": "Restaurant",
     "visited": false,
     "priority": 1,
     "location": GeoPoint(longitude, latitude)
}

Общий размер записи геопространственного индекса в location составляет 192 байта и рассчитывается следующим образом:

  • 7 байт для названия коллекции places;
  • 9 байт для идентификатора документа;
  • 128 байт для поля location;
  • 48 дополнительных байтов для общих метаданных.

Дальнейшие действия

Подробнее о ценах…