Нужна идея. Есть чужая база на MSSQL2000, модифицировать её нельзя. Там есть таблица вида (Код_ТС int not null FK, Путевая_точка int not null FK, План_время_прохождения datetime not null, Реал_время_прохождения datetime). Таблица содержит план для кучи маршрутных транспортных средств, времена когда они должны проходить эти путевые точки. В таблице порядка 10 тыс записей. Чужое ПО отслеживает прохождение этих точек и проставляет в колонку Реал_время_прохождения соответствующее время.
Мне нужно быстро получить таблицу (Код_ТС int, Последняя_путевая_точка int). Я могу сделать это запросом — но, как ни крути, получается время 0,5 — 0,7 сек, что неприемлемо. Идеально подошел бы триггер, проставляющий значения в какую-то мою таблицу — но модифицировать базу нельзя. Пока, единственным вариантом видится свое маленькое приложение, которое будет периодически (скажем, раз в секунд 10) опрашивать чужую таблицу и строить нужную мне. Задержка в 10 сек. приемлема, так как мне надо быстро получить табличку, пусть и с немного устаревшими данными.
Но, может еще есть какие-то варианты? Никак нельзя в пределах сервера реализовать функционал триггеров, но без навешивания самого триггера? Другие базы и пользовательские объекты создавать на сервере можно.
Спасибо
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re: [MSSQL]Отслеживание изменений в чужой базе без триггеров
Здравствуйте, Sshur, Вы писали:
S>Добрый день!
S>Нужна идея. Есть чужая база на MSSQL2000, модифицировать её нельзя. Там есть таблица вида (Код_ТС int not null FK, Путевая_точка int not null FK, План_время_прохождения datetime not null, Реал_время_прохождения datetime). Таблица содержит план для кучи маршрутных транспортных средств, времена когда они должны проходить эти путевые точки. В таблице порядка 10 тыс записей. Чужое ПО отслеживает прохождение этих точек и проставляет в колонку Реал_время_прохождения соответствующее время.
S>Мне нужно быстро получить таблицу (Код_ТС int, Последняя_путевая_точка int). Я могу сделать это запросом — но, как ни крути, получается время 0,5 — 0,7 сек, что неприемлемо.
Непонятно, почему. Приведите запрос, который вы выполняете. S> Идеально подошел бы триггер, проставляющий значения в какую-то мою таблицу — но модифицировать базу нельзя.
Почему нельзя?
S>Пока, единственным вариантом видится свое маленькое приложение, которое будет периодически (скажем, раз в секунд 10) опрашивать чужую таблицу и строить нужную мне. Задержка в 10 сек. приемлема, так как мне надо быстро получить табличку, пусть и с немного устаревшими данными.
Почему вы думаете, что получение данных из вашей таблички будет быстрее? S>Но, может еще есть какие-то варианты? Никак нельзя в пределах сервера реализовать функционал триггеров, но без навешивания самого триггера? Другие базы и пользовательские объекты создавать на сервере можно.
Можно попробовать состряпать indexed view на основе нужного запроса.
S>Спасибо
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: [MSSQL]Отслеживание изменений в чужой базе без тригге
Здравствуйте, Sinclair, Вы писали:
S>>Мне нужно быстро получить таблицу (Код_ТС int, Последняя_путевая_точка int). Я могу сделать это запросом — но, как ни крути, получается время 0,5 — 0,7 сек, что неприемлемо. S>Непонятно, почему. Приведите запрос, который вы выполняете.
Привести запрос не получится Проблема еще в том, что запрос может бы и получилось бы ускорить за счет индексов, но и их нельзя добавить по тем же причинам, что и триггер.
S>> Идеально подошел бы триггер, проставляющий значения в какую-то мою таблицу — но модифицировать базу нельзя. S>Почему нельзя?
Потому что база чужая, поддержкой занимаются другие люди, изменения убьются при ближайшем же апдейте и вообще внесение изменений запрещено лицензией.
S>>Пока, единственным вариантом видится свое маленькое приложение, которое будет периодически (скажем, раз в секунд 10) опрашивать чужую таблицу и строить нужную мне. Задержка в 10 сек. приемлема, так как мне надо быстро получить табличку, пусть и с немного устаревшими данными. S>Почему вы думаете, что получение данных из вашей таблички будет быстрее?
Потому что там будет не 10 тыс строк, а порядка 100. Изначальная табличка выглядит примерно как
для каждого ТС порядка 1000 строк. А мне надо, чтобы остались только выделенные. Плюс, из-за нормализации там надо подтягивать данные из других таблиц, а тут можно сразу денормализованный результат записать, что тоже ускорит выборку.
S>>Но, может еще есть какие-то варианты? Никак нельзя в пределах сервера реализовать функционал триггеров, но без навешивания самого триггера? Другие базы и пользовательские объекты создавать на сервере можно. S>Можно попробовать состряпать indexed view на основе нужного запроса.
Честно говоря, ни разу делать не приходилось, попробую
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[3]: [MSSQL]Отслеживание изменений в чужой базе без тригге
Здравствуйте, Sshur, Вы писали: S>для каждого ТС порядка 1000 строк. А мне надо, чтобы остались только выделенные.
Ага, то есть вы тянете данные, используя свёртку через ranking functions? S> Плюс, из-за нормализации там надо подтягивать данные из других таблиц, а тут можно сразу денормализованный результат записать, что тоже ускорит выборку.
Ну, может быть, может быть. Просто 500-700 мс — это довольно много для чистого выполнения запроса.
S>Честно говоря, ни разу делать не приходилось, попробую
Да, похоже — это ваш вариант. Раз нельзя навесить индексы на табличку, попробуйте на view. Но учтите, его придётся перегенерировать после каждого апдейта структуры чужой базы.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.