Преимущества подколлекций пожарных магазинов

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

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

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

Люди -> человек: {семья: 'Смит'}

против

Семьи -> семья: {имя: 'Смит'} -> Люди -> человек

Я ожидаю, что последний будет более эффективным, но верно ли это? Есть ли какие-нибудь оценки для каждого? Какие-либо другие преимущества вложенных коллекций (например, для транзакций)?

1 ответ

Решение

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

1 - Подколлекции дают вам более структурированную базу данных.

2 - запросы индексируются по умолчанию: производительность запросов пропорциональна размеру набора результатов, а не набора данных. Поэтому не имеет значения размер вашей коллекции, производительность зависит от размера вашего набора результатов.

3 - Максимальный размер каждого документа - 1 МБ. Например, если у вас есть массив заказов в вашем клиентском документе, было бы неплохо создать подколлекцию заказов для каждого клиента, потому что вы не можете предвидеть, сколько заказов будет иметь клиент. Делая это, вам не нужно беспокоиться о максимальном размере вашего документа.

4 - Ценообразование: Firestore взимает плату за чтение, запись и удаление документов. Поэтому, когда вы создаете много вложенных коллекций вместо использования массивов в документах, вам нужно будет выполнять больше операций чтения, записи и удаления, что увеличивает ваш счет.

Чтобы ответить на исходный вопрос об эффективности:

Опрос всех людей с family 'Smith' из people коллекции верхнего уровня действительно не медленнее, чем запрашивать всеpeople в 'Smith' family подколлекция.

Это объясняется в серии видео "Знакомство с Cloud Firestore" в серии " Как структурировать данные ".

Следует помнить о некоторых компромиссах между коллекциями верхнего уровня и вложенными коллекциями. В зависимости от конкретных запросов, которые вы собираетесь использовать, вам может потребоваться создатьcomposite indexes для запроса коллекций верхнего уровня или collection group indexesдля запроса подколлекций. Оба этих типа индексов учитываются при учете ограничения в 200 исключений для индекса.

Эти компромиссы подробно обсуждаются в нижней части сообщения блога Understanding Collection Group Queries и в разделе Карты, массивы и вложенные коллекции, Oh My! эпизод из серии видео "Знакомство с Cloud Firestore".

Я дал ссылки на соответствующие части обоих видео.

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

Вот некоторые преимущества обоих подходов:

Подколлекция:

  • Ваша база данных "кажется" более структурированной, поскольку в списке будет меньше коллекций верхнего уровня.
  • Нет необходимости хранить ссылку / внешний ключ / идентификатор родительского документа, поскольку это подразумевается структурой базы данных. Вы можете перейти к родительскому элементу через документ подколлекции ref.

Коллекция верхнего уровня:

  • Документы удалить проще. Используя вложенные коллекции, вам необходимо сначала удалить все документы вложенных коллекций, прежде чем удалять родительский документ. Для этого нет API, поэтому вам может потребоваться свернуть свои собственные вспомогательные функции.
  • Наличие родительского идентификатора непосредственно в каждом (под) документе может упростить обработку результатов запроса в зависимости от приложения.

Тодд ответил на это в видео Firebase на YouTube

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

2) Очень большие коллекции не так хороши с точки зрения производительности, когда вы не в сети. Но это, как правило, хорошие варианты.

Другие вопросы по тегам