Ridzhi
@Ridzhi
На вершине пищевой цепочки

Общие вопросы по базам данных?

Ребятки буду писать первый для себя хайлоад суперсервискоторыйзавоюетмирподномеромпятьсот. Есть парочка общих вопросов по архитектуре. Бэкэнд Silex, Postgres, Redis, Varnish. Почти все слова будут юзаться впервые и осваиваться по ходу дела.
По бд:
1. Безопасность данных не критична, но все же есть ли смысл делать разные бд аккаунты по различные статусы юзеров(админ, не админ) при том что будет фильтрация/защита на уровне роутов middleware?
2. Цель по струтуре базы сделать ее максимально ненуждающейся в джоинах, за неимением большого опыта в проектировании, этого я, скорее всего, достигну только через N итераций, но все же есть ли какая то методология по упрощению процесса, кроме как постараться осознать все приложение и все его возможные запросы разом и все это сразу же изложить в схемах?
3. Я правильно понимаю что достижение 5-ой нормальной формы помимо того, что практически невозможно, так еще и не про производительность?
  • Вопрос задан
  • 437 просмотров
Пригласить эксперта
Ответы на вопрос 1
> Цель по струтуре базы сделать ее максимально ненуждающейся в джоинах
Почему поставлена такая цель? Может нужно технические вопросы пересмотреть? Отсутствие нужды в джоинах ведет к появлению избыточности, как раз таки обычно пытаются добиться обратного - минимума избыточности за счет использования джоинов. Хайлоад конечно выдвигает особенные требования, поэтому я и интересуюсь, почему было поставлено такое условие.
> достижение 5-ой нормальной формы помимо того, что практически невозможно
насчет невозможности поспорил бы. Скорее - оно редко целесообразно, 3NF обычно вполне достаточно. Но есть и исключения (темпоральные данные например). Насчет производительности тоже не соглашусь - производительность гораздо больше формируют правильно/криво построенные индексы и правильные/кривые запросы. Лучше 15 джоинов в запросе, использующем индексы, чем один LIKE '%str%' без полнотекстовой индексации. Современные СУБД умеют в кэширование индексов в памяти, а prepared statements позволяют не парсить один и тот же запрос миллион раз.

А вообще, поймите одно правило: всегда есть проектирование сначала на бумаге, а потом уже в реале. Вы должны нормализовать прежде всего для себя, чтобы понимать, какие зависимости у вас в данных есть. Когда вы это все увидите, денормализовать всегда сможете. Ваши N итераций - это M+K, где M - это итерации по нормализации, K - обратный процесс, когда вы сознательно понижаете нормальную форму ваших данных. Если вы будете пропускать мимо глаз функциональные зависимости, ваши данные быстро превратятся в персональный адъ.

И наконец, если вы такое спрашиваете - уверены, что потянете highload в принципе?
Ответ написан
Ваш ответ на вопрос

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

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