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

Откуда:
Сообщений: 587
Доброго времени суток.
Такая задача.
Есть таблица в ней лежат данные упакованные в массивы varbinary.
необходимо распаковать эти данные и отдать пользователю по запросу.
Проблема в том что при распаковке данные помещаются в таблицу, к которой потом выполняется select.

На операцию insert уходит много времени, можно делать вставку пакетом.
Сначало производиться подготовка данных а потом массовая вставка в таблицу, а не по одной как сейчас.
21 ноя 12, 06:40    [13504570]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

Откуда:
Сообщений: 587
в 5 раз скорость увеличилась если использовать временную таблицу для промежуточного хранения результата распаковки данных
21 ноя 12, 06:46    [13504573]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
Гость333
Member

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

Вы радостью поделиться, или спросить что хотели?
21 ноя 12, 10:15    [13505097]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

Откуда:
Сообщений: 587
Есть ли в t-sql пакетная вставка данных.
или как можно сделать множество "быстрых" insert
21 ноя 12, 11:20    [13505613]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
mikola1982
Есть ли в t-sql пакетная вставка данных.

SELECT ... INTO
21 ноя 12, 11:24    [13505648]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
Гость333
Member

Откуда:
Сообщений: 3683
mikola1982
массивы varbinary.
необходимо распаковать эти данные
Сначало производиться подготовка данных а потом массовая вставка в таблицу, а не по одной как сейчас.

Что за распаковка? Она принципиально не может обрабатывать более одной записи за раз? Код покажите.
21 ноя 12, 11:32    [13505732]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

Откуда:
Сообщений: 587
Glory
mikola1982
Есть ли в t-sql пакетная вставка данных.

SELECT ... INTO


так не получиться, так как данные находятся в массиве varbinary.
в цикле из varbinary извлекаются данные и вот их хочется очень быстро вставлять в таблицу.

грубо говоря это похоже если бы вы в цикле генерили какие-то данные и вставляли их в таблицу.
21 ноя 12, 11:33    [13505752]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

Откуда:
Сообщений: 587
Очень урезанный код
@value varbinary(8000)

while (@countLen >= @counter)
	begin
		set @offset = cast (Substring(@value,@counter,4) as int)
				
		set @valueParam = cast(Substring(@value,@counter+4,9) as decimal(19,9))
	
		insert into ValueTemp values (@valueParam ,DateADD(second ,@offset,@sDatePacket), @idParam)	

		if (@endOffset <= @offset)
			break
		

		set @counter=@counter+13
	end   
21 ноя 12, 11:37    [13505783]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
mikola1982
так не получиться, так как данные находятся в массиве varbinary.
в цикле из varbinary извлекаются данные и вот их хочется очень быстро вставлять в таблицу.

А вы знаете какую то другую команду "извлечения" данных из поля кроме SELECT ?
21 ноя 12, 11:40    [13505814]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

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

причем тут поле?
см. описание задачи и вопроса
21 ноя 12, 11:45    [13505867]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
mikola1982
Glory,

причем тут поле?
см. описание задачи и вопроса

Смотрю
"Такая задача.
Есть таблица в ней лежат данные упакованные в массивы varbinary."
Расскажите, какой командой "извлечения данных" кроме select вы пользуетесь
21 ноя 12, 11:46    [13505885]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Прикольно. Вся база - в одном поле типа VARBINARY(MAX). Какая хорошая идея.
21 ноя 12, 11:50    [13505928]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
mikola1982
Очень урезанный код
@value varbinary(8000)

while (@countLen >= @counter)
	begin
		set @offset = cast (Substring(@value,@counter,4) as int)
				
		set @valueParam = cast(Substring(@value,@counter+4,9) as decimal(19,9))
	
		insert into ValueTemp values (@valueParam ,DateADD(second ,@offset,@sDatePacket), @idParam)	

		if (@endOffset <= @offset)
			break
		

		set @counter=@counter+13
	end   
Избавиться от цикла. Тогда можно будет говорить о пакетной вставке.
А еще лучше вообще избавиться от упаковки/распаковки.
21 ноя 12, 11:55    [13505970]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

Откуда:
Сообщений: 587
ну как от цикла избавиться ума не приложу.
но когда распаковываю данные могу формировать любой динамический sql - запрос.

если данные не запаковывать в массивы, то БД очень быстро встанет.
21 ноя 12, 12:03    [13506027]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
mikola1982
ну как от цикла избавиться ума не приложу.
Оформите задачу согласно п.п. 4, 6 рекомендаций и вам покажут как.
mikola1982
если данные не запаковывать в массивы, то БД очень быстро встанет.
Забавный вывод. На чем он основан?
21 ноя 12, 12:10    [13506101]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
aleks2
Guest
invm
На чем он основан?

Ей делать нечего будет. Вот и будет стоять.
21 ноя 12, 12:26    [13506255]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

Откуда:
Сообщений: 587
MS SQL Server 2008
проблема описана выше.
21 ноя 12, 12:33    [13506340]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
mikola1982
MS SQL Server 2008
проблема описана выше.
Лень готовить тестовый набор данных? Ну дело ваше.
21 ноя 12, 12:36    [13506379]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

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

в день допустим в БД поступает порядка 860000 тысяч записей. Одна запись три поля, общий объем одной записи 20 байт.
через месяц у вас будет в табличке порядка 860000 * 31 = 26 660 000 записей.

решений я нашел пару: 1 сжимать данные в массивы. 2 бить табличку на несколько.

Но господа вопрос не в этом, вопрос в том как же произвести "серию быстрых" insert в табличку или выполнить вставку данных одним insert
21 ноя 12, 12:39    [13506402]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
Konst_One
Member

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

зачем же тогда так сервер РБД мучать? взяли бы себе файловую базу данных и писали бы файлики
21 ноя 12, 12:41    [13506427]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

Откуда:
Сообщений: 587
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) Jun 17 2011 00:57:23 Copyright (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

по пункту 5 я не знаю что еще писать.
каких данных не хватает?
21 ноя 12, 12:41    [13506434]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

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

можете посоветовать нормальную файловую БД.

а так работаем с тем что есть.
21 ноя 12, 12:43    [13506452]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
это был намёк на непонятную реализацию вашей структуры хранения инфорамации. отсюда у вас и проблемы с её извлечением/использованием. подумайте ещё раз над архитектурой своего решения.
21 ноя 12, 12:45    [13506478]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
mikola1982
Member

Откуда:
Сообщений: 587
думали много.
писать с нуля хранение в файла дорого.
пока решили использовать БД.
Если, есть какие-то мысли по архитектуре с радостью выслушаю.

но мы отошли от темы ИХМО
21 ноя 12, 12:48    [13506521]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый insert  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
почему же отошли?

зачем вы реляционные данные пытаетесь запихнуть в одно поле varbinary, если вам нужно их потом вынимать от туда и как-то обрабатывать?
21 ноя 12, 12:50    [13506547]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить