0 / 0 / 0
Регистрация: 10.05.2018
Сообщений: 3

Секционирование

02.03.2021, 15:35. Показов 1504. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Помогите решить такую задачу!
Есть таблица заказов клиентов, которую хочу секционировать, но по "хитрому".
Чтобы была одна секция в которую всегда был insert по-умолчанию, а по мере "старения"
данных, перемещать их вручную в "архивные" секции.
Объясню зачем так:
Мне удобней написать SELECT ONLY FROM, чтобы получить "живые" данные, а для получения данных из архива
просто SELECT FROM.
С декларативным описанием Postgres 12 не могу получить такую структуру таблицы (и соответственно всех ее подчиненных).
А если идти через INHERITS, то писать доп. триггеры не очень хочется.

P.S> Сейчас сделано через схемы: 2014-год,2015-год... и чтобы выбрать данные по всей базе (шеф просит) нужно писать через union

Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2021, 15:35
Ответы с готовыми решениями:

Разбиение (секционирование) в PostgreSQL
в общем есть база на 29 млн строк. в нее идет постоянная запись и из нее нужно тоже постоянно получать данные. партицирование вроде...

Секционирование таблицы по году совершения сделки
Здравствуйте, У меня есть таблица sdelka (Её содержимое это: id_sdelka int auto_increment primary key, data date not null, summa...

Полный бэкап MySQL с ежедневными партициями (секционирование по дням)
Всем добрый день. Для понятности: Вопрос состоит в том, что не могу разобраться с партициями. Конкретно в том, как выполняется...

4
1267 / 980 / 385
Регистрация: 02.09.2012
Сообщений: 3,027
04.03.2021, 09:43
Мне видится, что при таком желании только вручную делать.
Для стандартного декларативного подхода так не полчится сделать.
Хотя не очень ясно желание в принципе разделять запросы.
Пишите одинаково, а уже в какую партицию попадет - это база сама решит.
В этом собственно и смысл.
0
0 / 0 / 0
Регистрация: 10.05.2018
Сообщений: 3
04.03.2021, 09:48  [ТС]
Спасибо! Уже помогли найти решение.
Вручную - не так страшно, как ждать .... ответа от сервера
Я просто приучил своих пользователей мгновенной реакции программы
на их действия и они теперь при малейшей задержке все бегут ко мне.
А я устал отвечать - база пухнет и т.д.
0
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 4
05.03.2021, 06:13
Если не затруднит, опубликуйте тут решение.
Чтоб помочь другим людям в решении их проблем.
0
0 / 0 / 0
Регистрация: 10.05.2018
Сообщений: 3
05.03.2021, 09:38  [ТС]
Без проблем! И так моя задача (для меня) была такой.

Исходные данные:
- Есть заказы клиентов (таблица)
- Есть продукты заказов (таблица)
- Есть материалы продуктов (таблица)
- Есть операции над материалами (таблица)
- Есть характеристики (параметры) продуктов (таблица)
- "пухнут" как и у всех

Желания:
- Разделить заказы на "живые" и "архивные"
- Доступ к данным через один и тот же запрос
- Скорость выборки-отклика программы
- Использовать минимальное количество телодвижений при дальнейшем обслуживании
- Индексы это хорошо, но маленькие индексы - лучше (опять таки - для меня!)
- Я сам должен решать когда "живые" данные становятся "архивными".
- При добавлении новых полей, они должны быть и в архиве для отработки одних и тех же запросов

P.S. Приучил своих пользователей к комфортной работе. А теперь при малейших задержках - бегут и кричат тормозит!!

Решение:
- Использовал декларативное объявление таблиц. (
SQL
1
partition BY range
)
- Создал все таблицы и разбил на 2 уровня вложенности. Первый уровень: года - 2010, 2011, ... Второй уровень: ID (от 1..10, 11..20, ....)
- Для "живых" данных использую год 2000, для остальных - реальный.
- Вставка данных с учетом разбиения идет автоматом, благодаря самому Postgres.
- Внешние ключи с версии 12 теперь можно подключать к конкретным секциям, т.е. целостность БД сохраняется.
- Индексы уменьшились
- Очень старые данные можно отключать (использовать не буду, т.к. шеф у меня любит статистику )
- Во всех запросах (по-тихоньку и где нужно) пропишу дополнительное условие:
SQL
1
WHERE fldarchive = any(:id_year)
и база начнет выборку только в нужном маленьком диапазоне. А в конкретных случаях вообще -
SQL
1
WHERE fldarchive = any(:id_year) AND id BETWEEN 1 AND 10
- Ну, осталось дело за малым, перемещение данных между годами. Это вручную (как и раньше с помощью функции). Для БД это не хорошо, но у нас есть окна, в которых можно это делать без особой нагрузки на сервак.

Как-то так! Я не претендую ни на что, я лишь рассказал какое решение меня устроило.
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2021, 09:38
Помогаю со студенческими работами здесь

СЕКЦИОНИРОВАНИЕ
Есть задача, таблицу я создам и все свяжу, но нужно создать секционирование: Построить информационно-логическую модель базы данных,...

Секционирование таблиц
Всем привет. Помогите разобраться с секционированием таблиц. Как с ныне существующей таблицы сделать секционированные. Разбить на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru