Преимущества подсетей firestore

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

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

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

Люди → человек: {family: 'Smith'}

против

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

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