Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Покритикуйте

Есть много (1000) файлов на диске, нужно их обработать и записать результат в базу.

Клиентское приложение вызывает процедуру, передает ей имя файла и его содержимое,
цель: обработать содержимое и вписать его в таблицу
create table file_content (id int, name nvarchar(1024), file_text nvarchar(MAX))

create proc usp_zakidyvalka_v_ochered
@fname nvarchar(1024),
@fblob varbinary(MAX)
as
...
-- 1 создаем временную очередь
if(object_id('tempdb..##que') IS NULL)
create table ##que
( id int identity(1,1),
fname nvarchar(1024) collate database_default,
fblob varbinary(MAX)
)

-- 2
insert into ##que(fname, fblob)
select @fname, @fblob

-- 3 сообщение в очередь, она нужна только как нотификация для возбуждения процедур
send ....
...

----------------

-- 4 процедура обработки очереди вынимает запись из очереди и обрабатывает ее.

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

Глобальную временную таблицу надумал использовать, чтобы не раздувать юзерскую базу.
5 авг 15, 12:12    [17977896]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
а вопрос какой ?
5 авг 15, 12:16    [17977928]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
а вопрос какой ?


Нужна критика, что не так или, если всё так, то и ладно.
Вопрос: в этом случае сработает глобальная временная таблица?
5 авг 15, 12:19    [17977941]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
Вопрос: в этом случае сработает глобальная временная таблица?

В смысле ? Будет ли работать ваш код ?
5 авг 15, 12:21    [17977963]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
Вопрос: в этом случае сработает глобальная временная таблица?

В смысле ? Будет ли работать ваш код ?


Оправдано ли использование ## таблицы в данном конексте.
Какие узкие места могут быть?
5 авг 15, 12:23    [17977980]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Что мешает иметь постоянную таблицу в tempdb, чтобы не
Winnipuh
Если рестартует сервер - необработанные файлы снова обрабатываются.
?
5 авг 15, 12:24    [17977985]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
Оправдано ли использование ## таблицы в данном конексте.

Оправдано для чего ? По сравнению с чем ?

Winnipuh
Какие узкие места могут быть?

При одноразовом заполении таблицы 1000ю записями ? При выборке из такой таблицы в единичном коннекте ?
5 авг 15, 12:27    [17978007]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Jaffar
Member

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


да сделай просто обычную таблицу в tempdb да и не парься.
а то глобальные- временные....
5 авг 15, 12:29    [17978020]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Jaffar
да сделай просто обычную таблицу в tempdb да и не парься.
а то глобальные- временные....

Зачем все файлы вообще грузить в одну таблицу, чтобы потом каждый файл обрабатывать отдельно ?
5 авг 15, 12:32    [17978039]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
Оправдано ли использование ## таблицы в данном конексте.

Оправдано для чего ? По сравнению с чем ?

Winnipuh
Какие узкие места могут быть?

При одноразовом заполении таблицы 1000ю записями ? При выборке из такой таблицы в единичном коннекте ?


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

нет, таблица будет использоваться как временная очередь, заполняться будет по ~10 записей, все зависит от файлов, есть 100 Кб, а есть 100 Мб затем из нее будут читать процедура активации, удалять запись, обрабатывать и писать в результирующую таблицу.

Временную таблицу для очереди - чтобы не использовать место в рабочей базе, может быть экспресс сервер, ну и чтобы не заморачиваться с удалением.
5 авг 15, 12:34    [17978059]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
invm
Что мешает иметь постоянную таблицу в tempdb, чтобы не
Winnipuh
Если рестартует сервер - необработанные файлы снова обрабатываются.
?


Да, может и постоянную, но там с правами могут быть проблемы, уже обсуждали здесь.
Выход вроде нашел для создания постоянных, но как один из вариантов возникла идея с ##, у них с правами никаких вопросов.
5 авг 15, 12:36    [17978083]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
нет, таблица будет использоваться как временная очередь, заполняться будет по ~10 записей, все зависит от файлов, есть 100 Кб, а есть 100 Мб затем из нее будут читать процедура активации, удалять запись, обрабатывать и писать в результирующую таблицу.

А зачем для очереди вообще нужна таблица ?
5 авг 15, 12:37    [17978088]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
нет, таблица будет использоваться как временная очередь, заполняться будет по ~10 записей, все зависит от файлов, есть 100 Кб, а есть 100 Мб затем из нее будут читать процедура активации, удалять запись, обрабатывать и писать в результирующую таблицу.

А зачем для очереди вообще нужна таблица ?


Для некоторых типов файлов обработка может занимать 10-15 сек.

Хорошо, как по-другому?
5 авг 15, 12:39    [17978108]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
Для некоторых типов файлов обработка может занимать 10-15 сек.

Хорошо, как по-другому?

почему обработчик сразу не может начать обрабатывать какой-то файл ? зачем все файлы сначала гурзить в таблицу ?
5 авг 15, 12:43    [17978140]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Winnipuh
Хорошо, как по-другому?
Сразу передавать содержимое файла в сообщении брокеру?
5 авг 15, 12:47    [17978168]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
invm
Winnipuh
Хорошо, как по-другому?
Сразу передавать содержимое файла в сообщении брокеру?


Ну, можно, но там varbinary(MAX) и длинная обработка.
Подумалось, что так эффективнее, varbinary(MAX) будет передаваться через transmission очередь и т.д.
5 авг 15, 12:53    [17978208]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Или, если экономите место в БД, передавайте в сообщении ссылку на файл и настройте возможность параллельной работы нескольких обработчиков.
5 авг 15, 12:55    [17978218]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
Для некоторых типов файлов обработка может занимать 10-15 сек.

Хорошо, как по-другому?

почему обработчик сразу не может начать обрабатывать какой-то файл ? зачем все файлы сначала гурзить в таблицу ?


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

Задача в том, чтобы за минимальное время обработать все файлы, это не постоянная задача, а некий апгрейд старого способа FT Search файлов на новый.
5 авг 15, 12:55    [17978224]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
invm
Или, если экономите место в БД, передавайте в сообщении ссылку на файл и настройте возможность параллельной работы нескольких обработчиков.


Можно, да, но для этого нужны права аккаунту, под которым сервер работает для доуступа к сетевым шарам, что не всегда решаемо.
В общем случае клиентское приложение имеет доступ к шарам, сервер не имеет, поскольку оно ему не надо
5 авг 15, 12:57    [17978241]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
не все сразу, а по одному практически, может быть несколько приложения могут закидывать в очередь.

Вы тупите ?
Еще раз вопрос - зачем сначала грузить файлы в таблицу а потом передавать их в обработчик ?
Чтобы побольше траффика создать ?
Обработчик не может получить _имя файла_ и начать его обрабатывать ?
5 авг 15, 12:58    [17978248]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Jaffar
Member

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

так залить в одну таблицу все пути к файлам и запустить по ней 100500 потоков.
Пусть они выгребают по 1 строчке и тут же засасывают и обрабатывают и помечают как обработанную.

Так делал когда разбирал говно_адреса клиентов через интернет сервис.
Запустил к нему сразу 1 млн. коннектов - сервис крякнул....
потом его подняли, а меня забанили по ip.
Потом я уже был аккуратней.
5 авг 15, 13:03    [17978285]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
не все сразу, а по одному практически, может быть несколько приложения могут закидывать в очередь.

Вы тупите ?
Еще раз вопрос - зачем сначала грузить файлы в таблицу а потом передавать их в обработчик ?
Чтобы побольше траффика создать ?
Обработчик не может получить _имя файла_ и начать его обрабатывать ?


Ответ на вопрос №1: нет, по моему убеждению в данном случае я не туплю

Обработчик содержимого файла - это процедура, находится в базе SQL Server, а у него в общем случае нет доступа к сетевым шарам и не должно быть.
5 авг 15, 13:05    [17978297]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
Обработчик содержимого файла - это процедура, находится в базе SQL Server, а у него в общем случае нет доступа к сетевым шарам и не должно быть.

Ага. И передать ему сразу содержимое файла тоже невозможно.
Нужно обязательно сначала его в таблицу загрузить
5 авг 15, 13:12    [17978343]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
Обработчик содержимого файла - это процедура, находится в базе SQL Server, а у него в общем случае нет доступа к сетевым шарам и не должно быть.

Ага. И передать ему сразу содержимое файла тоже невозможно.
Нужно обязательно сначала его в таблицу загрузить


Ну да, так у меня сейчас и сделано, вызов процедуры с содержимым, работет.
Но на больших файлах, а особенно на pdf из-за кривого ifilter для pdf (от майкрософта на Windows 8 и Windows Server 2012) на вызове торчит секунд скажем на 5 мб файле - 10 секунд.

Вот и решил поискать пути оптимизации обработки. Все усложняется тем, что это не в моей среде, и файлы могут быть разные, и серверы могут быть экспрессы,с их ограничениями и т.д...
5 авг 15, 13:17    [17978374]     Ответить | Цитировать Сообщить модератору
 Re: О ## временных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
Вот и решил поискать пути оптимизации обработки.

если в одну процедуру содержимое файла передается 10 секунд, то почему вдруг в другую процедуру этоже содержимое начнет передаваться быстрее ?
5 авг 15, 13:19    [17978386]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить