powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / посоветуйте, как решить проблему
4 сообщений из 4, страница 1 из 1
посоветуйте, как решить проблему
    #34949968
alecsey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
исходные данные: есть огромная таблица items(customer,item,start_date,end_date,...<прочие атрибуты>) - получаем таблицу с текущими и историческими данными, историческими данными обычно активно интересуются не более недели(пока выставили счёт, пока он дошёл и тп... позже тоже бывает интересуются, но реже), отношение customer к item - один ко многим, удалений в таблице не бывает, запросы бывают много чаще чем апдейты+добавление... для получения списка item's приминяются запросы вида select * from items where customer=<customer> and <date of search> between start_date and end_date, где <date of search> - практически всегда попадает в интервал sysdate-1/24... сейчас система стала заметно подтормаживать, пытаюсь решить проблему, есть несколько вариантов, хотелось бы услышать мнение

1) сеционировать по диапазону на 2 партиции: устаревшие(end_date less than <дата на месяц меньше текущей>), текущие остальные... и раз в N месяцев запускать по расписанию скрипт выделяющий из текущей партиции записи закрытые более месяца назад и переводящий их в устаревшую партицию(тут надо поподробней посмотреть в возможности oracl'a, напрмер похоже придётся пересобирать индексы)
2) создать механизм(через тригеры или по расписанию, или через процедуры работы с базовой таблицей) - который будет на каждое изменение таблицы items, вносить изменения и в денормализованую таблицу items_current(customer, items<список item'ов через запятую>, start_date<максимальное значение start_date для всех item'ов даного customer>, end_date<null>), при запросах искать в начале в таб items_current и только если не найдутся необходимые данные(дата поиска < start_date или дата поиска > даты последнего обновления если обновление по расписанию)
3) вариация 2)... хранить не 1 запись для каждого customer, а набор записей например за месяц тогда кол-во "непопавших" записей можно считать равным 0
...
Рейтинг: 0 / 0
посоветуйте, как решить проблему
    #34950451
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecseyесть несколько вариантов, хотелось бы услышать мнение
Приведенные варианты показывают, что Вам стоит сначала прочитать Кайта, а уж потом садиться реализовывать БД.

Оба варианта нормальны в своей ситуации, но если делать их по-человечески. Первый - просто обычный range partition по дате, без извращений. Второй - materialized view + query rewrite (тут сходу не уверен, что query rewrite легко и непринужденно заюзается - надо смотреть)
...
Рейтинг: 0 / 0
посоветуйте, как решить проблему
    #34951726
alecsey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer alecseyесть несколько вариантов, хотелось бы услышать мнение
Приведенные варианты показывают, что Вам стоит сначала прочитать Кайта, а уж потом садиться реализовывать БД.
Оба варианта нормальны в своей ситуации, но если делать их по-человечески. Первый - просто обычный range partition по дате, без извращений. Второй - materialized view + query rewrite (тут сходу не уверен, что query rewrite легко и непринужденно заюзается - надо смотреть)
Спасибо за критику, но
1) это не извращение, а движущееся окно, у кайта описывалось если не ошибаюсь ;)
2) materialized view - смотрел в эту сторону, не совсем подходит, complite refresh будет занимать слишком много времени
...
Рейтинг: 0 / 0
посоветуйте, как решить проблему
    #34952165
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecsey1) это не извращение, а движущееся окно, у кайта описывалось если не ошибаюсь ;)
Описывалось, но в главе про аналитические функции :)

alecsey2) materialized view - смотрел в эту сторону, не совсем подходит, complite refresh будет занимать слишком много времени
Вам таки надо выбрать что-нибудь одно. Если refresh будет занимать слишком много времени, значит завершения переноса между этими движущимися окнами Вы вообще не дождетесь.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / посоветуйте, как решить проблему
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]