Проектируй Базы Данных

1 мин на чтение

Базы данных есть практически в каждом приложении, давай посмотрим, с какой стороны подходить к их проектированию.

Думай о конечных структурах, с которыми тебе хотелось бы работать

Если данных ожидается достаточно много, то всегда старайся делать схему БД как можно проще. Особенно, если хочешь вменяемое время select-a и/или высокий RPS. Нормализация — это прекрасно, но чем больше сущностей, таблиц и реляций создашь, тем сложнее тебе будет проворачивать большое количество запросов и вставлять новые данные. Всегда помни о росте количества данных, иначе, в какой-то момент, тебе будет больно и обидно, — БД может начать замедляться с ответом, а в некоторых случаях, резко встать колом, тут все зависит от твоего умения предсказывать поведение планировщика.

Думай о партициях

Если данные планируют постоянный рост, сразу думай о том, как и когда будешь партиционировать свои таблицы. В Postgres, например, для этого есть целых два механизма. А в Clickhouse параметры партиции можно указать прямо во время создания таблицы MergeTree. Не забудь подумать точно ли тебе нужны все эти данные, потому что обслуживание партиций тоже не бесплатно, и в определенных запросах (привет join-ы) у тебя могут возникнуть вопросики, на которые explain analize ответить не поможет.

Даже если данных не очень много (пара миллионов записей) и структура очень простая, в зависимости от настроек, даже с небольшим RPS твоя постгря может внезапно начать иногда тормозить на обычных селектах по primary key. И заметишь ты это только на графике с 99-м перцентилем.

И главное — заранее

Твоя схема БД — это почти всегда скелет приложения. Вся твоя логика очень часто строится вокруг данных, не думай что в любой момент можешь безболезненно эту схему поменять. А если данных достаточно много, то вопрос не только в переписывании кода но и в болезненном процессе миграций.

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

Метки:

Дата изменения:

Оставить комментарий