Na tej stronie opisujemy rozmiar pamięci dokumentów, pól i wpisów indeksu w Cloud Firestore.
Informacje o kosztach tego miejsca znajdziesz na stronie Cennik.
Rozmiar ciągu znaków
Rozmiary ciągów znaków są obliczane jako liczba bajtów zakodowanych w formacie UTF-8 + 1.
Te dane są przechowywane jako ciągi znaków:
- Nazwa kolekcji
- Nazwy pól
- Wartości pól typu ciąg znaków (w tym
_id)
Przykład:
- Nazwa kolekcji
taskszajmuje 5 bajtów + 1 bajt, czyli łącznie 6 bajtów. - Nazwa pola
descriptionzajmuje 11 bajtów + 1 bajt, czyli łącznie 12 bajtów.
Rozmiar wartości pola
W tabeli poniżej znajdziesz rozmiary wartości pól według typu.
| Typ | Rozmiar |
|---|---|
| Tablica | suma rozmiarów wartości, |
| Wartość logiczna | 1 bajt |
| Dane binarne | Długość w bajtach + 1 w przypadku podtypu innego niż ogólny (innego niż 0) |
| Data | 8 bajtów |
| Liczba zmiennoprzecinkowa | 8 bajtów |
| Double128 | 16 bajtów |
| 32-bitowa liczba całkowita | 4 bajty |
| 64-bitowa liczba całkowita (long) | 8 bajtów |
| Obiekt | Suma rozmiarów ciągów znaków każdej nazwy pola i rozmiarów każdej wartości pola w umieszczonym obiekcie. |
| Klucz minimalny | 1 bajt |
| Tryb maksymalny klucza | 1 bajt |
| Null | 1 bajt |
| Wyrażenie regularne | (długość wzorca + 1) + (długość opcji + 1) |
| Sygnatura czasowa | 8 bajtów |
| Ciąg znaków | Liczba bajtów zakodowanych w formacie UTF-8 + 1 |
Na przykład pole wartości logicznej o nazwie done będzie używać 6 bajtów:
- 5 bajtów na nazwę pola
done, - 1 bajt na wartość logiczną.
Rozmiar dokumentu
Rozmiar dokumentu to suma:
- rozmiar ciągu tekstowego nazwy kolekcji,
- Suma rozmiaru ciągu znaków każdej nazwy pola (z wyjątkiem
_id) - suma rozmiarów poszczególnych wartości pól (w tym
_id), - 48 dodatkowych bajtów
Ten przykład dotyczy dokumentu w kolekcji tasks:
{
"_id": "my_task_id",
"type": "Personal",
"done": false,
"priority": 1,
"description": "Learn Cloud Firestore"
}
Łączny rozmiar pól to 78 bajtów:
| Nazwa i wartość pola | Rozmiar pola w bajtach |
|---|---|
"_id": "my_task_id" |
11 – wartość ciągu znaków pola, |
"type": "Personal" |
14 5 za nazwę pola + 9 za wartość ciągu pola |
"done": false |
6 5 za nazwę pola + 1 za wartość logiczną pola |
"priority": 1 |
17 9 za nazwę pola + 4 za 32-bitową liczbę całkowitą wartości pola |
"description": "Learn Cloud Firestore" |
34 12 za nazwę pola + 22 za wartość ciągu pola |
Rozmiar dokumentu wynosi więc 6 + 78 + 48 = 132 bajty:
- 6 za nazwę kolekcji,
- 78 bajtów na pola,
- 48 dodatkowych bajtów
Rozmiar wpisu indeksu
Rozmiar wpisu w indeksie jest sumą:
- rozmiar ciągu tekstowego nazwy kolekcji,
- Rozmiar wartości pola
_id - Suma zindeksowanych wartości pól.
- 48 dodatkowych bajtów
Rozważmy dokument w kolekcji tasks:
{
"_id": "my_task_id",
"type": "Personal",
"done": false,
"priority": 1,
"description": "Learn Cloud Firestore"
}
W przypadku indeksu pól done i priority (oba rosnąco) łączny rozmiar wpisu indeksu w tym indeksie wynosi 70 bajtów:
- 6 bajtów na nazwę kolekcji
tasks - 11 bajtów na wartość pola
_id, - 1 bajt na wartość pola logicznego,
- 4 bajty na wartość pola 32-bitowej liczby całkowitej,
- 48 dodatkowych bajtów
W przypadku indeksów rozproszonych, jeśli dokument nie zawiera żadnego z pól, wpis indeksu nie jest tworzony. Jeśli dokument zawiera co najmniej 1 z indeksowanych pól, tworzony jest wpis indeksu, w którym brakujące indeksowane pola są ustawione na NULL.
Rozmiar wpisu zdarzenia strumienia zmian
Rozmiar zdarzenia strumienia zmian to suma:
- Suma rozmiaru ciągu tekstowego nazwy kolekcji (x2).
- W przypadku zdarzeń wstawiania i aktualizowania dokumentu:
- Suma rozmiaru ciągu znaków każdej nazwy pola w
fullDocumentlubupdateDescription(z wyjątkiem_id). - Suma rozmiarów poszczególnych wartości pól w
fullDocumentlubupdateDescription. (w tym_id).
- Suma rozmiaru ciągu znaków każdej nazwy pola w
- W przypadku transakcji obejmujących wiele dokumentów – dodatkowe 24 bajty na
lsiditxnNumber. - 92 dodatkowe bajty
Rozważmy przykład zdarzenia wstawienia dokumentu w kolekcji zadań:
{
"_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"
},
}
Łączny rozmiar zdarzenia strumienia zmian wynosi 149 bajtów:
- 92 bajty na ogólne metadane,
- 12 bajtów na podstawie nazwy kolekcji
tasks(6 bajtów) * 2 - 11 bajtów na wartość pola
_id, - 12 bajtów na nazwę pola
description, - 22 bajty na wartość pola
description,
Rozmiar wpisu w indeksie wyszukiwania tekstu
Rozmiar wpisu indeksu wyszukiwania tekstowego w indeksie jest sumą:
- Rozmiar ciągu tekstowego nazwy kolekcji
- Rozmiar wartości
_id - Suma bajtów z indeksowanych wartości pól (x2)
- 48 dodatkowych bajtów na ogólne metadane.
Rozważmy przykład zdarzenia wstawienia dokumentu z _id my_task_id w kolekcji tasks:
{ "_id": "my_place", "type": "Restaurant", "visited": false, "priority": 1, "location": GeoPoint(longitude, latitude) }
Łączny rozmiar wpisu w indeksie wyszukiwania tekstowego w description wynosi 105 bajtów na podstawie:
- 6 bajtów na nazwę kolekcji
tasks - 11 bajtów na wartość
_id, - 44 bajty, czyli 22 bajty na pole
descriptionx2 - 48 dodatkowych bajtów na ogólne metadane.
Rozmiar wpisu indeksu geoprzestrzennego
Rozmiar wpisu indeksu geoprzestrzennego w indeksie jest sumą:
- Rozmiar ciągu tekstowego nazwy kolekcji
- Rozmiar wartości
_id - 128 bajtów na każdy zindeksowany punkt geograficzny
- 48 dodatkowych bajtów na ogólne metadane.
Rozważmy przykład zdarzenia wstawienia dokumentu z _id my_place w kolekcji places:
{ "_id": "my_place", "type": "Restaurant", "visited": false, "priority": 1, "location": GeoPoint(longitude, latitude) }
Łączny rozmiar wpisu indeksu geoprzestrzennego w location wynosi 192 bajty, na co składają się:
- 7 bajtów na nazwę kolekcji
places - 9 bajtów na identyfikator dokumentu,
- 128 bajtów w przypadku pola
location, - 48 dodatkowych bajtów na ogólne metadane.
Co dalej?
Dowiedz się więcej o cenach.