Для приложения социальной сети типа Facebook требуется высокопроизводительная структура базы данных для хранения данных в Firebase (NoSQL).
Данные для хранения:
- Userinfo (name, email etc)
- Friends
- Posts
- Comments on posts.
Язапутан в следующих двух структурах БД относительно производительности запросов (если база данных становится огромной).
(Ref: C_xxx - это Collection, D_xxx - это документ)
Структура 1
C_AllData
- D_UserID-1
name: xxxx,
email: yyy,
friends: [UserID-3, UserID-4]
- C_Posts
- D_PostId-1
Text: hhh
Date: zzz
- C_Comments
- D_CommentId-1
UserID: 3
Text: kkk
- D_CommentId-2
UserID: 4
Text: kkk
- D_PostId-2
Text: hhh
Date: zzz
- C_Comments
- D_CommentId-3
UserID: 3
Text: kkk
- D_CommentId-4
UserID: 4
Text: kkk
- D_UserID-2
name: xxxx,
email: yyy
friends: [UserID-5, UserID-7]
- C_Posts
- D_PostId-3
Text: hhh
Date: zzz
- C_Comments
- D_CommentId-5
UserID: 5
Text: kkk
- D_CommentId-6
UserID: 7
Text: kkk
Структура 2
C_AllUsers
- D_UserID-1
name: xxxx,
email: yyy
friends: [UserID-3, UserID-4]
- D_UserID-2
name: xxxx,
email: yyy
friends: [UserID-5, UserID-7]
C_AllPosts
- D_PostId-1
UserID: 1
Text: hhh
Date: zzz
- C_Comments
- D_CommentId-1
UserID: 3
Text: kkk
- D_CommentId-2
UserID: 4
Text: kkk
- D_PostId-3
UserID: 2
Text: hhh
Date: zzz
- C_Comments
- D_CommentId-5
UserID: 5
Text: kkk
- D_CommentId-6
UserID: 7
Text: kkk
Мой вопрос: каковы плюсы и минусы двух подходов?
Некоторые моменты, о которых я мог подумать, приведены ниже, пожалуйста, исправьте меня, если я ошибаюсь.
Структура 1:
Получает всепосты данного пользователя, быстрее в структуре 1?Поскольку мы точно указываем на точную коллекцию (AllData / {UserID} / Posts /)
Поскольку вся БД находится в одной коллекции, разве масштабируемость не хороша?
Структура 2:
Разделенная БД -> Лучшая масштабируемость?
Разделенная БД -> Лучшая производительность?
Меньшая вложенность -> Лучшая производительность?
AllPosts под однимколлекция -> Медленные запросы?
Или, если вы можете предложить лучшую модель, это тоже было бы здорово.