Cálculos de tamanho de armazenamento

Esta página descreve o tamanho do armazenamento de entidades, chaves, propriedades e entradas de índice do Firestore no modo Datastore. Saiba mais sobre os custos desse armazenamento em Preços do modo Datastore.

Tamanho de strings

O tamanho das strings é calculado pelo número de bytes codificados em UTF-8 + 1.

Estes elementos são armazenados como strings:

  • chaves
  • nomes de tipos
  • nomes de namespaces (o namespace padrão tem o tamanho 0)
  • nomes de propriedade
  • valores das propriedades de strings

Exemplo:

  • O nome do tipo Task usa 4 bytes + 1 byte, totalizando 5 bytes.
  • O nome da propriedade description usa 11 bytes + 1 byte, totalizando 12 bytes.
  • O nome do namespace my_name_space usa 13 bytes + 1 byte, totalizando 14 bytes.

Tamanho de chaves

O tamanho de uma chave é a soma:

  • do tamanho da string do namespace (se não for o namespace padrão);
  • do tamanho total da string do caminho da chave. Cada código de um número inteiro tem 8 bytes;
  • 16 bytes

Para uma chave do tipo Task no namespace padrão com um ID numérico e nenhum ancestral:

Task id:5730082031140864

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

  • 5 bytes do nome do tipo Task
  • 8 bytes do código numérico
  • 16 bytes de uma chave

Para uma chave do tipo Task no namespace padrão com um ID de string e nenhum ancestral:

Task name:my_task_id

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

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

Para uma entidade Task com um ancestral TaskList no namespace padrão:

TaskList id:5654313976201216 > Task id:5629499534213120

O ancestral usa 9 + 8 = 17 bytes:

  • 9 bytes do nome do tipo TaskList
  • 8 bytes do código numérico

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

  • 17 bytes do ancestral
  • 5 bytes do nome do tipo Task
  • 8 bytes do código numérico
  • 16 bytes de uma chave

Se essa entidade estiver no namespace my_name_space, o tamanho da chave será 14 + 46 = 60 bytes, porque o nome my_name_space usa 14 bytes.

Tamanho de propriedades

O tamanho de uma propriedade é a soma:

  • do tamanho da string do nome da propriedade;
  • do tamanho do valor da propriedade.

Veja a seguir o tamanho dos valores da propriedade por tipo.

Tipo Tamanho
Matriz a soma dos tamanhos dos valores
Blob comprimento em bytes
Booleano 1 byte
Dupla 8 bytes
Entidade incorporada o tamanho da entidade
Ponto geográfico 16 bytes
Número inteiro 8 bytes
Key tamanho da chave
Nulo 1 byte
String número de bytes codificados em UTF-8 + 1
Carimbo de data/hora 8 bytes

Por exemplo, uma propriedade chamada done com um tipo de booleano usaria 6 bytes:

  • 5 bytes do nome da propriedade done
  • 1 byte do valor booleano

Tamanho da entidade

O tamanho de uma entidade é a soma:

Este exemplo refere-se a uma entidade do tipo Task no namespace padrão com um ID numérico e nenhum ancestral:

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 das propriedades Tamanho das propriedades em bytes
"type": "Personal" 14
5 do nome da propriedade + 9 do valor da string da propriedade
"done": false 6
5 do nome da propriedade + 1 do valor booleano da propriedade
"priority": 1 17
9 do nome da propriedade + 8 do valor inteiro da propriedade
"description": "Learn Google Cloud Datastore" 41
12 do nome da propriedade + 29 do valor da string da propriedade

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

  • 29 bytes da chave
  • 78 bytes das propriedades
  • 32 bytes de uma entidade

Tamanho de entradas de índice

Veja a seguir como é calculado o tamanho da entrada de um índice para índices integrados e compostos.

Índices integrados

O tamanho de uma entrada de índice integrada é a soma:

Por exemplo, observe uma entidade do tipo Task no namespace padrão com um ID numérico e nenhum ancestral:

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

Se done for uma propriedade indexada, a entrada de índice integrado do índice done de propriedade única consistirá em: chave, nome e valor da propriedade done, nome do tipo Task e 32 bytes de uma entrada de índice. O tamanho total dessa entrada do índice é de 72 bytes:

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

Por padrão, os bancos de dados do modo Datastore predefinem automaticamente dois índices de uma propriedade para cada propriedade de cada tipo de entidade, um em ordem crescente e o outro em ordem decrescente. Portanto, essa entidade teria um tamanho de entrada de índice de 72 bytes no índice done da propriedade única em ordem crescente e um tamanho de entrada de índice de 72 bytes no índice done da propriedade única em ordem decrescente.

Índices compostos

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

Por exemplo, observe uma entidade do tipo Task no namespace padrão com um ID numérico e nenhum ancestral:

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

Considere um índice composto que use as propriedades done e priority (ambas crescentes):

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

  • 29 da chave;
  • 1 do valor booleano da propriedade done
  • 8 do valor inteiro da propriedade priority
  • 32 de uma entrada do índice.

Se não quiser que o Firestore no modo Datastore mantenha um índice para uma propriedade, exclua a propriedade dos índices. A exclusão de uma propriedade a remove de qualquer índice composto.

A seguir