Cálculos do tamanho de armazenamento

Esta página descreve o tamanho do armazenamento de entidades, chaves, propriedades e entradas de índice no Firestore no modo Datastore. Pode saber mais acerca dos custos deste armazenamento em Preços do modo Datastore.

Tamanho da string

Os tamanhos das strings são calculados como o número de bytes com codificação UTF-8 + 1.

Os seguintes elementos são armazenados como strings:

  • Chaves
  • Nomes de tipos
  • Nomes de espaços de nomes (o espaço de nomes predefinido tem o tamanho 0)
  • Nomes das propriedades
  • Valores de propriedades de string

Por exemplo:

  • O nome do tipo Task usa 4 bytes + 1 byte, para um total de 5 bytes.
  • O nome da propriedade description usa 11 bytes + 1 byte, para um total de 12 bytes.
  • O nome do espaço de nomes my_name_space usa 13 bytes + 1 byte, para um total de 14 bytes.

Tamanho da chave

O tamanho de uma chave é a soma de

  • O tamanho da string do espaço de nomes (se não estiver no espaço de nomes predefinido)
  • O tamanho da string do caminho da chave completo (os IDs de números inteiros têm 8 bytes cada)
  • 16 bytes

Para uma chave do tipo Task no espaço de nomes predefinido com um ID numérico e sem ancestral:

Task id:5730082031140864

O tamanho da chave é de 5 + 8 + 16 = 29 bytes:

  • 5 bytes para o nome do tipo Task
  • 8 bytes para o ID numérico
  • 16 bytes para uma chave

Para uma chave do tipo Task no espaço de nomes predefinido com um ID de string e sem ancestral:

Task name:my_task_id

O tamanho da chave é de 5 + 11 + 16 = 32 bytes:

  • 5 bytes para o nome do tipo Task
  • 11 bytes para o ID da string my_task_id
  • 16 bytes para uma chave

Para uma entidade Task com um antepassado TaskList no espaço de nomes predefinido:

TaskList id:5654313976201216 > Task id:5629499534213120

O antecessor usa 9 + 8 = 17 bytes:

  • 9 bytes para o nome do tipo TaskList
  • 8 bytes para o ID numérico

Assim, o tamanho da chave de uma entidade Task com um antepassado TaskList usa 17 + 5 + 8 + 16 = 46 bytes:

  • 17 bytes para o antepassado
  • 5 bytes para o nome do tipo Task
  • 8 bytes para o ID numérico
  • 16 bytes para uma chave

Se esta entidade estiver no espaço de nomes my_name_space, o tamanho da chave é de 14 + 46 = 60 bytes, porque o nome my_name_space usa 14 bytes.

Tamanho da propriedade

O tamanho de uma propriedade é a soma de

  • O tamanho da string do nome da propriedade
  • O tamanho do valor da propriedade

A imagem seguinte mostra o tamanho dos valores das propriedades por tipo.

Tipo Tamanho
Matriz a soma dos tamanhos dos respetivos valores
Blob comprimento em bytes
Booleano 1 byte
Duplo 8 bytes
Entidade incorporada o tamanho da entidade
Ponto geográfico 16 bytes
Número inteiro 8 bytes
Chave o tamanho da chave
Nulo 1 byte
String Número de bytes codificados em UTF-8 + 1
Indicação de tempo 8 bytes

Por exemplo, uma propriedade denominada done com um tipo Booleano usaria 6 bytes:

  • 5 bytes para o nome da propriedade done
  • 1 byte para o valor Booleano

Tamanho da entidade

O tamanho de uma entidade é a soma de

Este exemplo destina-se a uma entidade do tipo Task no espaço de nomes predefinido com um ID numérico e sem antepassado:

Task id:5730082031140864
 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Google Cloud Datastore"

O tamanho total das propriedades é de 78 bytes:

Nome e valor da propriedade Tamanho da propriedade em bytes
"type": "Personal" 14
5 para o nome da propriedade + 9 para o valor da string da propriedade
"done": false 6
5 para o nome da propriedade + 1 para o valor booleano da propriedade
"priority": 1 17
9 para o nome da propriedade + 8 para o valor inteiro da propriedade
"description": "Learn Google Cloud Datastore" 41
12 para o nome da propriedade + 29 para o valor da string da propriedade

Assim, o tamanho da entidade é 29 + 78 + 32 = 139 bytes:

  • 29 bytes para a chave
  • 78 bytes para as propriedades
  • 32 bytes para uma entidade

Tamanho da entrada de índice

O tamanho de uma entrada de índice é calculado da seguinte forma para índices incorporados e compostos.

Índices incorporados

O tamanho de uma entrada de índice incorporada é a soma do seguinte:

Por exemplo, considere uma entidade do tipo Task no espaço de nomes predefinido com um ID numérico e sem antepassado:

Task id:5730082031140864
 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Google Cloud Datastore"

Se done for uma propriedade indexada, a entrada do índice incorporado para o índice de propriedade único done consiste na chave, no nome e no valor da propriedade done, no nome do tipo Task e em 32 bytes para uma entrada de índice. O tamanho total desta entrada de índice é de 72 bytes:

  • 29 para a chave
  • 6 para o nome da propriedade done e o valor booleano
  • 5 para o nome do tipo Task
  • 32 para uma entrada de índice

Por predefinição, as bases de dados do modo Datastore predefinem automaticamente dois índices de propriedade única para cada propriedade de cada tipo de entidade, um por ordem ascendente e outro por ordem descendente. Assim, esta entidade teria uma entrada de índice de 72 bytes no índice done de propriedade única por ordem ascendente e teria uma entrada de índice de 72 bytes no índice done de propriedade única por ordem descendente.

Índices compostos

O tamanho de uma entrada de índice composto é a soma do seguinte:

Por exemplo, considere uma entidade do tipo Task no espaço de nomes predefinido com um ID numérico e sem antepassado:

indexes:
- kind: Task
  properties:
  - name: done
    direction: asc
  - name: priority
    direction: asc

Considere um índice composto que usa as propriedades done e priority (ambas ascendentes):

O tamanho total da entrada de índice neste índice é de 70 bytes:

  • 29 para a chave
  • 1 para o valor Booleano da propriedade done
  • 8 para o valor inteiro da propriedade priority
  • 32 para uma entrada de índice

Se não quiser que o Firestore no modo Datastore mantenha um índice para uma propriedade, exclua a propriedade dos seus índices. Tenha em atenção que a exclusão de uma propriedade remove-a de quaisquer índices compostos.

O que se segue?