Как правильно спроектировать БД?

Пишу учебный проект - сайт знакомств, проектирую БД (postgreSQL).

Есть несколько сущностей:

- чаты;
- стена на странице пользователя;
- фотоальбом пользователя.

Все 3 сущности прекрасно вписываются в следующую архитектуру БД. Есть модели:

- Thread: на него вешаются Post;
- Post: собственно пост;
- User;
- User2Thread - реализует отношение many-to-many между User и Thread. Так же содержит некоторые характеристики, например, права User в этом Thread. Обычно на один Thread создается 2 записи в User2Thread.

Все отлично, я доволен)) НО! Захотелось к некоторым типам Thread (к постам на стене пользователя, постам в фотоальбоме) добавить возможность добавления лайков и комментов.

И комменты и лайки вполне вписываются в ту же архитектуру: их так же можно представить в виде Post, которые прикрепляются к Thread. Соответственно, на каждый такой Post (допустим, добавление фотографии в фотоальбом) будет создаваться 2 записи Thread и 4 User2Thread. Итого 7!!! INSERT'ов на 1 фотографию. В таблицах Thread и User2Thread по 1 индексу.

С одной стороны, мня хочется пойти по этому пути, т.к. я получаю: большой функционал описывается небольшим количеством моделей, небольшим и лаконичным API. Код будет легче поддерживать как на бэкенде, так и на фронтенде.

С другой стороны, это избыточно: комменты и лайки можно описать более простыми моделями. Это снизит объем БД и нагрузку. Но вырастет API и сложность поддержки.

У меня, к сожалению, нет опыта работы с большими и нагруженными БД, поэтому мне сложно оценить, на сколько критичен такой рост и такая нагрузка.

Собственно вопрос:

Чем мне грозит такой рост БД? Допустим, будет 1 млрд. фотографий, на который будет создано 2 млрд. Thread и 4 млрд. User2Thread. Лично я не вижу большой проблемы в этом.

В нагрузке на БД в виде 7 INSERT'ов при загрузке одной фотографии я тоже не вижу проблемы. Это все-таки не такое частое действие. На добавление нового поста в чат-тред (предположительно самое частое действие) будет 1 INSERT.

Как бы поступили Вы? Спасибо!
  • Вопрос задан
  • 482 просмотра
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
Чем мне грозит такой рост БД?
ничем. Вероятность, что у тебя внезапно появятся 10^6 пользователей, которые наплодят 10^12 постов и у тебя еще не будет денег на комманду - ничтожно мала
Ответ написан
@Qumbeez
Предлагаю вам воспользоваться полиморфной связью. Лайки и комментарии вы сможете прицепить к любой из моделей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы