Ускорить запросы с базы данных перенося данные в архив
От: Caracrist http://1pwd.org/
Дата: 20.07.09 10:51
Оценка:
Есть примерно такая архитектура... (на самом деле ещё есть fk->pk связки в базе, но сейчас не об этом)

create table TableName(
    PK bigint IDENTITY(1,1) NOT NULL,
    TableName_data varchar(4096) NULL 
-- ещё столбики
)
GO
create table TableName_Arc(
    PK bigint NOT NULL,
    TableName_data varchar(4096) NULL
-- ещё столбики
)
GO
create view TableName_All as select * from TableName union select * from TableName_Arc


Есть два типа запроса, один делается редко но по всем данным через view (далее "Редкий"), другой очень часто, но только по актуальным данным(далее "Частый"). Есть алгоритм определяющий эту актуальность таким образом, что Частый запрос по актуальным данным всегда возвращает то же, что вернул бы выполнись он по всем данным. От сюда появилась идея разделения.
Вопрос в том, как реализовать сам процесс переноса данных из основных таблиц в архивные.
Я вижу два варианта:

1. Тригер на добавлении, проверяющий какие-нибудь условия (например время с прошлого переноса или количество строк) и делающий перенос по мере надобности.
Проблема 1: постоянная его инициализация это пустая трата ресурса.
Проблема 2: перенос будет за счёт чьей-то транзакции и если он окажется тяжелым, может просто вернуть timeout, и не комитнутся.
2. Настроить что-то типа background worker активизирующегося по таймеру или событию и выполняющего эту работу.
Проблема: никогда такого не делал и даже примерно незнаю куда копать

Работаю с MSSQL 2008/2005.

Help me...
~~~~~
~lol~~
~~~ Cracked Minds (головоломки)
MSSQL 2008/2005 optimization
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.