Как получить размер документа Firestore? - PullRequest
0 голосов
/ 27 мая 2019

Из Документов Firestore мы получаем, что максимальный размер для документа Firestore равен:

Максимальный размер документа 1 МБ (1 048 576 байт)

ВОПРОС

Как узнать текущий размер одного документа, чтобы проверить, подходит ли я лимит в 1 Мб?

Пример:

var docRef = db.collection("cities").doc("SF");

docRef.get().then(function(doc) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
        // IS THERE A PROPERTY THAT CAN DISPLAY THE DOCUMENT FILE SIZE?
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
    }
}).catch(function(error) {
    console.log("Error getting document:", error);
});

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Расчеты, использованные для вычисления размера документа, полностью документированы здесь .Там много текста, поэтому, пожалуйста, перейдите туда, чтобы прочитать его.Не стоит копировать весь этот текст здесь.

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

1 голос
/ 27 мая 2019

Я искал ссылку на Firebase, ожидая, что метаданные будут иметь атрибут, но это не так. Вы можете проверить это здесь .

Таким образом, мой следующий подход - вычислить вес объекта в приближении. Библиотека sizeOf , кажется, имеет разумный API для нее.

Так было бы что-то вроде:

sizeof.sizeof(doc.data());

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

[ОБНОВЛЕНИЕ] Спасибо Дагу Стивенсону за прекрасное понимание

Так что мне было любопытно сколько будет на самом деле разница , поэтому с моими неуклюжими js я сделал грязное сравнение, вы можете увидеть демо здесь

С учетом этого объекта:

 {
  "boolean": true,
  "number": 1,
  "text": "example"
  }

И дисконтирование id это результат:

| Method  | Bytes |
|---------|-------|
| FireDoc | 37    |
| sizeOf  | 64    |

Таким образом, библиотека sizeOf может быть хорошим предиктором, если мы хотим переоценить (при условии, что вычисления хороши и будут вести себя более или менее одинаково для более сложных объектов). Но, как поясняется в комментарии, это приблизительная оценка .

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