Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL-CLR или Stored Procedures?  [new]
renaton
Member

Откуда:
Сообщений: 753
Доброго времени дня уважаемые гуру!
Проблема такая:
На MS SQL Server есть база и в одной из этих таблиц надо сделать конвертирование данных. Эта таблица значений примерно такого вида:
PARAM_IDVALUETIMESTAMP
65000244.218.11.2009 10:00:00
65000123.518.11.2009 10:03:00
65000123.518.11.2009 10:06:00
65000123.518.11.2009 10:09:00
................
65000123.518.11.2009 10:57:00
65001244.218.11.2009 10:00:00
65001123.518.11.2009 10:03:00
65001123.518.11.2009 10:06:00
65001123.518.11.2009 10:09:00
................
65001123.518.11.2009 10:57:00

Нада сделать выборку по каждому PARAM_ID из этой таблицы по часам (то есть 20 записей) и найти среднее и записать уже другим PARAM_ID с меткой на начало часа.
Вопрос вот в чем:
Как и где лучше это сделать либо в T-SQL с использованием CURSOR или в SQL-CLR?
P.S. Просьба автора сильно не пинать т.к. он не гуру в T-SQL
30 ноя 09, 13:51    [7996563]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
iljy
Member

Откуда:
Сообщений: 8711
renaton,
а зачем тут курсор??
INSERT INTO Table1 (Param_Id, Value, [Timestamp])
SELECT New_Param_ID -- Не понял, как он у вас должен рассчитываться
   AVG(Value), 
   dateadd(hh, datediff(hh, 0, [Timestamp]), 0)
from Table1
group by dateadd(hh, datediff(hh, 0, [Timestamp]), 0), Param_Id
30 ноя 09, 14:15    [7996806]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
renaton
Member

Откуда:
Сообщений: 753
iljy
renaton,
а зачем тут курсор??

Я еще забыл сказать про дополнительное условие:
Получается в течении часа 20 записей для каждого параметра, НО может быть что и параметров и меньше 20-ти вот тут и начинается самое интересное. Если допустим параметров не хватает то:
1. Если не хватает 1 параметра с конца или начала то среднее находим просто
AVG(VALUE)
2. Если не хватает 1 параметра с 2-го по 19-ую позицию то значение этого парамера находим как половина суммы соседних значений этого параметра (аппроксимация).
3. Если не хватает значений у параметра больше 1 то среднее находим просто
AVG(VALUE)
Вот тут еще такие сложные накладочки. Я поэтому спросил может SQL-CLR?
30 ноя 09, 14:26    [7996890]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
renaton
Member

Откуда:
Сообщений: 753
Видимо гуру SQL сегодня отдыхают :)
30 ноя 09, 15:15    [7997367]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
iljy
Member

Откуда:
Сообщений: 8711
renaton,

так сложнее конечно, но курсор имхо все равно не нужен. У вас параметров не больше 20? И идут они каждые 3 минуты, так? так получите группировкой их все в одной строке и обработайте как хотите! Примерно так:

SELECT Param_ID -- Не понял, как он у вас должен рассчитываться
   dateadd(hh, datediff(hh, 0, [Timestamp]), 0) [Timestamp],
   max(case datepart(mi, [Timestamp]) when 3 then Value end) V1,
   max(case datepart(mi, [Timestamp]) when 6 then Value end) V2,
   max(case datepart(mi, [Timestamp]) when 9 then Value end) V3,
...
   max(case datepart(mi, [Timestamp]) when 57 then Value end) V19
from Table1
group by dateadd(hh, datediff(hh, 0, [Timestamp]), 0), Param_Id

30 ноя 09, 15:15    [7997369]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
renaton
Member

Откуда:
Сообщений: 753
iljy
renaton,

так сложнее конечно, но курсор имхо все равно не нужен. У вас параметров не больше 20? И идут они каждые 3 минуты, так? так получите группировкой их все в одной строке и обработайте как хотите!

Параметров много около 2000 параметров, в дальнейшем количество может увеличиться. И каждый параметр раз в 3 мин круглосуточно пишется в БД. Размер БД тоже немаленький....Каждый месяц где-то + 1,5 гигабайта. Вопрос очень серьезный. Тут везде вопросы как лучше поступить... Поэтому собственно задал свой вопрос здесь.... с одной стороны хочется написать что-то, что будет минимум загружать сервер, а с другой чтобы что-то можно было грамотно написать...
30 ноя 09, 15:20    [7997417]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
iljy
Member

Откуда:
Сообщений: 8711
renaton,

мда... тогда может и правда быстрее будет с курсором.
30 ноя 09, 16:07    [7997756]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]

Guest
(ихмо) два варианта - изменить структуру.... (как вариант партицированые таблицы)
второй вычисление триггером... раз в три минуты это очень медленно -между можно "добежать до канадской границы" :) ... а может всё объединить.
30 ноя 09, 16:55    [7998074]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
renaton
Member

Откуда:
Сообщений: 753
(ихмо) два варианта - изменить структуру.... (как вариант партицированые таблицы)
второй вычисление триггером... раз в три минуты это очень медленно -между можно "добежать до канадской границы" :) ... а может всё объединить.

2-ой вариант однозначно не подойдет, т.к. тут еще помимо простого нахождения AVG еще надо будет анализировать состояние этой записи, то есть выполнить анализ этого параметра для всех 20-ти параметров (Добавляется еще один столбец о состоянии этой записи)
1-ый вариант можно рассмотреть поподробнее... но только наверное не партицированные таблицы.... а может вьюшки? Жду ваших решений и предложений
30 ноя 09, 17:58    [7998466]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
renaton
Member

Откуда:
Сообщений: 753
Думается мне что лучше использовать SQL-CLR и не парится.. :) А вы как считаете?
1 дек 09, 08:04    [7999893]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
iljy
Member

Откуда:
Сообщений: 8711
renaton,

не лучше. По нескольким причинам - безопасность и быстродействие. Я думаю то же самое на t-sql с использованием курсора будет работать быстрее, и не нужно заморачиваться с разрешениями на CLR (это далеко не везде разрешается). А алгоритм не настолько сложный чтоб вызвать серьезные затруднения в реализации.
1 дек 09, 11:24    [8000921]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
renaton
Member

Откуда:
Сообщений: 753
iljy
renaton,
не лучше. По нескольким причинам - безопасность и быстродействие. Я думаю то же самое на t-sql с использованием курсора будет работать быстрее, и не нужно заморачиваться с разрешениями на CLR (это далеко не везде разрешается). А алгоритм не настолько сложный чтоб вызвать серьезные затруднения в реализации.

Но ведь курсоры, как везде говорят, "тормознутые". Неужели даже они будут быстрее SQL-CLR?
1 дек 09, 11:56    [8001179]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31168
renaton
iljy
renaton,
не лучше. По нескольким причинам - безопасность и быстродействие. Я думаю то же самое на t-sql с использованием курсора будет работать быстрее, и не нужно заморачиваться с разрешениями на CLR (это далеко не везде разрешается). А алгоритм не настолько сложный чтоб вызвать серьезные затруднения в реализации.

Но ведь курсоры, как везде говорят, "тормознутые". Неужели даже они будут быстрее SQL-CLR?
Тормознутые, но не настолько же, как запросы на получение следующей записи из SQL-CLR.

А вообще интересно было бы провести тестик...
1 дек 09, 12:04    [8001258]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
iljy
Member

Откуда:
Сообщений: 8711
renaton

Но ведь курсоры, как везде говорят, "тормознутые". Неужели даже они будут быстрее SQL-CLR?

А как по вашему происходит получение следующей записи в SQL-CLR? ;)
1 дек 09, 13:12    [8001951]     Ответить | Цитировать Сообщить модератору
 Re: SQL-CLR или Stored Procedures?  [new]
renaton
Member

Откуда:
Сообщений: 753
Хотелось бы за 1 проход в курсоре сделать все необходимые расчеты....
2 дек 09, 08:08    [8005799]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить