TL;DR

Чтобы справиться с таблицей, которая, по прогнозам, будет содержать много данных, мы можем использовать функцию секционирования данных Postgres.

Эта функция позволяет нам разделить таблицу на более мелкие таблицы, которые будут содержать часть данных на основе правила, например. первая буква имени клиента или месяц даты создания.

Таким образом, мы можем запросить родительскую таблицу, используя правило:

SELECT * FROM родительская_таблица ГДЕ применяется правило, например. созданный_at = «какая-то дата»

и получать данные быстрее.

Проблема: Таблица базы данных, которая может стать слишком большой для эффективного запроса.

Допустим, у нас есть таблица, в которой будут храниться результаты предварительной обработки веб-журналов нашей аналитической системой в реальном времени. Примерный объем ввода в эту таблицу составит, например, ~50 ГБ в неделю. Итак, через год у нас будет таблица ~2,5 ТБ. Несмотря на то, что это в пределах ограничений Postgres(подробнее см. в разделе «Ограничения Postgres» в конце), выполнение запросов к такой таблице выглядит не очень эффективно, не так ли?

Возможное решение: разделение данных

Что такое секционирование данных

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

Так, например, если наша таблица customer_transactions представляет собой таблицу, размер которой, по прогнозам, станет довольно большим, мы можем разделить ее (разделить) по определенной характеристике, например. thecustomer_name (который, вероятно, должен находиться в таблице клиентов…