Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Резидентная (бесконечная) задача - лучше триггером или джобом? / 23 сообщений из 23, страница 1 из 1
08.03.2019, 12:03
    #39783837
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
Здравствуйте

Задача - рилтайм заливка данных по odbc в базу, и там по поступлению - оперативная обработка.
Не очень сложная, но оперативность нужна максимально возможная.
Особенность в том, что могут быть разрывы связи.
После этого в худшем случае будет перезаливка данных в размере 1млн. записей)))
Это до 50 мб примерно.
Причем льется и последнее самое, и история вперемешку))
Контроль будет по еще одной таблички, там примерно последние данные
Так что можно оценить примерно что подтянулось уже... как-то))
Самый оперативный расчет-1 делается по данным за последние секунды
Фоном идет расчет-2 чуть большего диапазона, его можно раз в минуту, например

Идеи:
1. Заливка в таблицу оптимизированную для памяти.
2. Обработка либо триггером на вставку либо всё-таки в хранимой процедуре, вызываемой по джобу, в бесконечном цикле в ней.
(можно перезапускать раз в час, например).

Текущее содержимое завязать с другой таблицей, вставить итог в третью на обработку, далее можно переносить обработанное.
Может даже и индексы по буферной таблице делать не придется, чтобы вставку не замедляли.
Либо вью сделать...
Это промежуточная таблица, видимо.
С неё потом скидывать в обычную периодически.

В общем, пока вопрос, на что лучше ориентироваться - триггер или хранимая процедура с бесконечным циклом.
Но там WAITFOR нежелателен никакой вообще, просто молотить что есть постоянно.
И если там минимальная пауза 1 сек, то не устроит.
А если без этого, то как к такому сервер отнесется?)))

Скорее всего заливка там идет по одной записи
То есть триггер будет на каждую включаться
Последовательные вызовы не перекроют друг друга в таком бешеном темпе?
Не работал с триггерами, не знаю. Ждут друг друга?

Заранее спасибо за рекомендации.

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)
...
Рейтинг: 0 / 0
08.03.2019, 17:31
    #39783896
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
Слишком мутный поток сознания.
...
Рейтинг: 0 / 0
08.03.2019, 19:35
    #39783918
.Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
dklim.kzn,

Вы хотите натянуть СУБД на поток данных. Это плохая идея, потому что СУБД всегда работает с пачками данных в рамках транзакций. Существуют технологии, гораздо лучше подходящие для этого класса задач. Например, для гарантированной доставки есть интеграционная шина. Для потоков данных - решения класса StreamInsight или доработанного напильником ETL.
...
Рейтинг: 0 / 0
08.03.2019, 21:43
    #39783964
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
dklim.kznЗадача - рилтайм заливка данных по odbc в базу, и там по поступлению - оперативная обработка.
Не очень сложная, но оперативность нужна максимально возможная.
Особенность в том, что могут быть разрывы связи.
После этого в худшем случае будет перезаливка данных в размере 1млн. записей)))
Это до 50 мб примерно.
Причем льется и последнее самое, и история вперемешку))
Контроль будет по еще одной таблички, там примерно последние данные
Так что можно оценить примерно что подтянулось уже... как-то))
Самый оперативный расчет-1 делается по данным за последние секунды
Фоном идет расчет-2 чуть большего диапазона, его можно раз в минуту, например

Идеи:
1. Заливка в таблицу оптимизированную для памяти.
2. Обработка либо триггером на вставку либо всё-таки в хранимой процедуре, вызываемой по джобу, в бесконечном цикле в ней.
(можно перезапускать раз в час, например).Оперативная обработка в СУБД и выполняется, как оперативная обработка.
Скажем, ввёл операционист данные платежа, в результате обработки всё посчиталось, и засунулось в нужные таблицы.

Так что по первому пункту вопрос непонятен - сама процедура заливки и является "обработкой".

Дальше вопрос, как это технически организовать, но тут слишком мало информации. Какие то "рилтайм заливка данных по odbc в базу", что это такое? Вот, например, вызов хранимой процедуры для вставки данных - это тоже "рилтайм заливка данных по odbc в базу", и в процедуре можно как раз сделать ту самую обработку.

Идея с триггером вообще не очень хороша, триггеры не предназначены для обработки, но можно и ими сделать.

А то, что считается фоном, можно считать в джобе.
...
Рейтинг: 0 / 0
08.03.2019, 21:53
    #39783966
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
.Евгений,

спасибо за инфу про StreamInsight, это интересно и скорее всего то, что надо. Займусь на досуге. Пока что хотелось бы сделать тем, что есть, и с чем имел дело.
...
Рейтинг: 0 / 0
08.03.2019, 22:08
    #39783974
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
alexeyvg,

Заливка в базу - это настройка источника данных и скармливание его прикладной программе. После чего в указанную таблицу начинают добавляться строки.

Думаю, триггером можно неплохо сделать. В нем же апдейт таблицы результатов, и потом апдейт таблицы с данными для расчетов (замена имеющегося значения поступившим по данному параметру).

Вопрос только чтобы триггеры последовательно выполнялись, то есть ждали друг друга. Как это происходит?

Про реализацию джобом - что будет без waitfor?
Сервер не скипит?
...
Рейтинг: 0 / 0
08.03.2019, 22:19
    #39783977
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
Надо проверить, по одной ли записи льется приложения
Если нет, то делать курсором перебор в нужном порядке.

Но даже так вопрос про следующую сработку триггера.
Можно задать, чтобы подождала завершение предыдущей?
Или надо вручную регулировать?
И разные ли таблицы inserted в них видны?
Или если данные в моменте залетают быстрее обработки - в работающей процедуре триггера увидим новые данные по ходу пьесы?
...
Рейтинг: 0 / 0
08.03.2019, 22:28
    #39783980
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
dklim.kznВопрос только чтобы триггеры последовательно выполнялись, то есть ждали друг друга. Как это происходит?Триггер - это хранимая процедура, которая вызывается в конце выполнения команды INSERT в той же транзакции. После завершения выполнения этой хранимой процедуры, выполнение INSERT завершается.
Вот, исходя из этого, думайте, как и что у вас будет выполняться, и в какой последовательности.
...
Рейтинг: 0 / 0
09.03.2019, 00:05
    #39783994
.Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
dklim.kznalexeyvg,
Про реализацию джобом - что будет без waitfor?
Сервер не скипит?
Минимальный шаг шедулера MS - 10 секунд.

Максимально возможную оперативность вы не получите в силу отличительных свойств СУБД, со всеми их достоинствами и недостатками. Вы будете класть данные в таблицу и ее индексы, ждать окончания транзакции, бегать по индексу, выполнять код SQL (далеко не самый оперативный язык), еще вами упомянут некий контроль... вы забиваете гвоздь плоскогубцами. Так тоже можно, но заведомо не эффективно.
...
Рейтинг: 0 / 0
09.03.2019, 08:58
    #39784016
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
.ЕвгенийМаксимально возможную оперативность вы не получите в силу отличительных свойств СУБД, со всеми их достоинствами и недостатками. Вы будете класть данные в таблицу и ее индексы, ждать окончания транзакции, бегать по индексу, выполнять код SQL (далеко не самый оперативный язык), еще вами упомянут некий контроль... вы забиваете гвоздь плоскогубцами. Так тоже можно, но заведомо не эффективно.

Вы бредите.
MS SQL = On Line Transaction Processing.
Т.е. обработка запросов в текущем времени.

Можно, канешно, вещать о "других системах без индексов и транзакций и самых оперативных языках", но если подумать - голое балабольство выходит.

Просто ты не умеешь готовить кошек.
...
Рейтинг: 0 / 0
09.03.2019, 10:51
    #39784032
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
.Евгений,

Про 10 секунд шедулера

То есть нельзя повесить задачу на 10:10:23 ?
Просто из интереса вопрос)

Так и непонятночто будет плохого, нсли сделать хранимую процелуру и написать там что нибудь из серии
While 1=1 begin
select a=count(*) from b (nolock)
End

Вопрос тупой, надо просто глянуть, но что то никто не намекнул)
...
Рейтинг: 0 / 0
09.03.2019, 10:57
    #39784033
.Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
aleks222.ЕвгенийМаксимально возможную оперативность вы не получите в силу отличительных свойств СУБД, со всеми их достоинствами и недостатками. Вы будете класть данные в таблицу и ее индексы, ждать окончания транзакции, бегать по индексу, выполнять код SQL (далеко не самый оперативный язык), еще вами упомянут некий контроль... вы забиваете гвоздь плоскогубцами. Так тоже можно, но заведомо не эффективно.

Вы бредите.
MS SQL = On Line Transaction Processing.
Т.е. обработка запросов в текущем времени.

Можно, канешно, вещать о "других системах без индексов и транзакций и самых оперативных языках", но если подумать - голое балабольство выходит.

Просто ты не умеешь готовить кошек.
Я не хочу сейчас что-то доказывать или хвастаться. Я просто спрошу: вы понимаете, что такое StreamInsight и зачем это было создано, причем независимо от MS SQL?

"Когда у тебя в руках молоток, все задачи кажутся гвоздями" (Маслоу).
...
Рейтинг: 0 / 0
09.03.2019, 11:00
    #39784034
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
alexeyvg,

"Было бы ошибкой думать" (с) Ленин

То есть если случится два инсерта рядом, и триггер первого почему-то не закончится до начала второго - то они будут параллельно работать? Или всё же второй будет ждать, пока первый не снимет блокировку? Это в конце произойдет или можно командой сделать внутри триггера - отпустить, а дальше развлекаться с другими таблицами?

В итоге я так и не понял, увижу ли я вторую запись в inserted до щавершения первого триггера.

И еще не понял, разные ли таблицы inserted в двух смежных триггерах? Может она генерится отдельная для каждого?

Руки не дошли почитать) но вроде ответы должны быть неемкие, если так - может подскажете всё же)
...
Рейтинг: 0 / 0
09.03.2019, 20:36
    #39784139
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
dklim.kznТо есть если случится два инсерта рядом, и триггер первого почему-то не закончится до начала второго - то они будут параллельно работать? Или всё же второй будет ждать, пока первый не снимет блокировку? Это в конце произойдет или можно командой сделать внутри триггера - отпустить, а дальше развлекаться с другими таблицами?В сиквеле все запросы работают параллельно ,в том числе запросы к одним базам, одним таблицам.
При этом они накладывают блокировки на те ресурсы, которые нельзя использовать параллельно. Например, при вставке нужно залочить страницу, что бы внести в неё изменения.
Соответственно, ответ на ваш вопрос зависит от того, используют ли эти 2 действия один и тот же ресурс так, что бы это нужно было делать монопольно, или нет. Ситуация с триггером тут совершенно не отличается от случая, когда триггера нет.
dklim.kznВ итоге я так и не понял, увижу ли я вторую запись в inserted до щавершения первого триггера.inserted - это такая, эээ, локальная переменная, виртуальная псевдотаблица. Разумеется, в тысячах выполняемых на сервере триггерах inserted не "одна и та же". Запускается тысяча инсёртов, одновременно выполняется тысяча экземпляров триггера, в них тысяча индивидуальных таблиц inserted
dklim.kznРуки не дошли почитать) но вроде ответы должны быть неемкие, если так - может подскажете всё же)Прикольно у вас, люди, определящие и разрабатывающие архитектуру решения, не имеют ни малейшего представления о технологиях, которые собираются применить :-)
...
Рейтинг: 0 / 0
09.03.2019, 22:53
    #39784183
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
При чём здесь разрывы связи? Вы или гарантируете доставку или не гарантируете. Хоть фоном хоть патефоном.
При планировании архитектуры решения таблички - это уже на самом последнем этапе, а Вы начали с табличек.
...
Рейтинг: 0 / 0
09.03.2019, 22:56
    #39784185
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
Делаю JOB-ами. Запускаю по-необходимости.
...
Рейтинг: 0 / 0
10.03.2019, 03:05
    #39784216
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
alexeyvg,

у нас не люди - у нас людь)))
и не у нас, а у меня, я)))

да, опытным путем установлено, что блокировка отрабатывает как надо
сделал табличку, оптимизированную для памяти, и триггер к ней
в неё льются данные из приложения, в триггере складываю в другую табличку пришедшие данные
попробовал при нуле и 100 записях в ней уходить на ветку тяжелого селекта
потом запоминать количество записей во второй табличке - нормально, 0 и 100, как надо

да, в inserted постоянно одна строка

кстати данные заливаются шустренько, 1 млн строк за 200 секунд, это 5000 в секунду, а у меня в прыжке 1500 допустим

триггер instead of на память-оптимизированные таблички не ставится
в варианте обычной таблички с таким триггером вставка во вторую табличку шуршит медленнее

в общем, буду раз вставлять и раз в сутки чистить
...
Рейтинг: 0 / 0
10.03.2019, 03:09
    #39784217
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
Владислав Колосов,

про доставку всё просто
есть приложенька со своей связью, она мне будет пихать данные
когда возникает разрыв - тогда она может танцевать как угодно
реконнект, с последующей перезаливкой данных, возможно
всего миллиона записей за день - легко

так что никаких гарантий, и нужна лишь адекватная реакция на это всё
...
Рейтинг: 0 / 0
10.03.2019, 03:14
    #39784218
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
SIMPLicity_,

между тем в oltp (процедурах, скомпилированных в собственном коде для память-оптимизированных таблиц) - waitfor нельзя))

так что джобом только обычную процедуру вещать с таким циклом, а уже из нее вызывать олтпшку

но вроде у меня триггером должно неплохо получиться
...
Рейтинг: 0 / 0
10.03.2019, 12:18
    #39784244
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
dklim.kznalexeyvg,
да, в inserted постоянно одна строка

Я тоже так думал, что там всегда по одной бывает, пока не обжегся, когда туда неожиданно вкатилось больше.
...
Рейтинг: 0 / 0
11.03.2019, 22:25
    #39784705
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
Massa52dklim.kznalexeyvg,
да, в inserted постоянно одна строка

Я тоже так думал, что там всегда по одной бывает, пока не обжегся, когда туда неожиданно вкатилось больше.О чем вы вообще говорите, товарищ даже не удосужился сам прочитать как работает триггер и что такое inserted таблица.
...
Рейтинг: 0 / 0
12.03.2019, 12:03
    #39784798
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
Там вообще путаница в головах - пишет о реалтйме и о том, что данные могут приходить мало того, что с перерывами, так еще и невадилированными.
...
Рейтинг: 0 / 0
12.03.2019, 20:43
    #39785076
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резидентная (бесконечная) задача - лучше триггером или джобом?
Владислав Колосов,

И что смущает то?
Да, когда связь есть - всё должно щелкать рилтайм. Когда плсле обрыва она восстанавлиаается - в потоке летят свежие данные, а между ними по возможности и старые подливаются. Не я такое придумал, но ничего против не имею)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Резидентная (бесконечная) задача - лучше триггером или джобом? / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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