(для дальнейшего использования этот тип вопроса "передового опыта" лучше подходит для группы Google Firebase , чем для переполнения стека)
Во-первых, я не уверен, было ли это преднамеренным или ошибочным в вашей диаграмме, но я просто хочу отметить, что в Структуре # 1 вы должны иметь username
, age
и gender
как поля в пользовательском документе, а не в качестве подколлекции, как показано на диаграмме. (Я предполагаю, что это то, что вы имели в виду, учитывая ваше описание, но просто чтобы быть уверенным, поскольку пользовательские данные будут плохо использовать вложенные коллекции).
Теперь на ваш главный вопрос:
Firestore значительно выигрывает при работе с плоской структурой данных 1013 *, то есть с большим количеством небольших документов, в отличие от небольшого количества больших документов. Это один из моментов, на которые ссылаются люди, когда говорят об анти-вложенных методах.
То, как вы структурируете свои данные, зависит от того, как вы планируете взаимодействовать с ними , а не только от того, как имеет смысл смотреть.
Structure #1
не будет работать так же хорошо, как Structure #2
, если вы когда-либо планируете, чтобы пользователь мог видеть повестки дня других пользователей. Это все еще будет работать, но запрос будет намного ужаснее.
При этом, если повестки дня видны только их владельцам, тогда Structure #1
может иметь больше смысла, просто учитывая тот факт, что организация более интуитивно понятна для этой цели. Вы также можете получить немного более быстрое время ответа на запрос при использовании Structure #1
.
В Structure #2
нет ничего плохого. Если либо сейчас, либо в будущем пользователи могут просматривать повестки дня других пользователей, то Structure #2
- ваш лучший выбор. Structure #2
также лучше, если вы планируете искать программы по нескольким пользователям по одному из его полей. Например, если вы когда-либо хотели просмотреть 20 самых последних документов повестки дня для всего приложения по их полю timestamp
.
У моего проекта очень похожая ситуация в другом контексте. Наше приложение имеет Posts
и Content
. Каждый Post
содержит один или несколько Content
. Мы могли бы сделать Content
вложенной коллекцией для каждого Post
(как ваш Structure #1
), но вместо этого мы сделали Content
коллекцию корневого уровня (как ваш Structure #2
), потому что нам нужно было запросить Content
документы между пользователями на основе одного из их полей.
В заключение, Structure #2
является более гибким, но если вы уверены, что не хотите запрашивать повестки дня у нескольких пользователей ( запрос группы сбора ), тогда Structure #1
может быть более выгодным .
Я обычно по умолчанию Structure #2
, за исключением тех редких, но законных обстоятельств, когда действительно имеет смысл выделять данные для конкретных документов.