Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
mikola1982 Member Откуда: Сообщений: 587 |
Доброго времени суток. Такая задача. Есть таблица в ней лежат данные упакованные в массивы varbinary. необходимо распаковать эти данные и отдать пользователю по запросу. Проблема в том что при распаковке данные помещаются в таблицу, к которой потом выполняется select. На операцию insert уходит много времени, можно делать вставку пакетом. Сначало производиться подготовка данных а потом массовая вставка в таблицу, а не по одной как сейчас. |
21 ноя 12, 06:40 [13504570] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
в 5 раз скорость увеличилась если использовать временную таблицу для промежуточного хранения результата распаковки данных |
21 ноя 12, 06:46 [13504573] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
mikola1982, Вы радостью поделиться, или спросить что хотели? |
21 ноя 12, 10:15 [13505097] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
Есть ли в t-sql пакетная вставка данных. или как можно сделать множество "быстрых" insert |
21 ноя 12, 11:20 [13505613] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
SELECT ... INTO |
||
21 ноя 12, 11:24 [13505648] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Что за распаковка? Она принципиально не может обрабатывать более одной записи за раз? Код покажите. |
||
21 ноя 12, 11:32 [13505732] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
так не получиться, так как данные находятся в массиве varbinary. в цикле из varbinary извлекаются данные и вот их хочется очень быстро вставлять в таблицу. грубо говоря это похоже если бы вы в цикле генерили какие-то данные и вставляли их в таблицу. |
||||
21 ноя 12, 11:33 [13505752] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
А вы знаете какую то другую команду "извлечения" данных из поля кроме SELECT ? |
||
21 ноя 12, 11:40 [13505814] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
Glory, причем тут поле? см. описание задачи и вопроса |
21 ноя 12, 11:45 [13505867] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Смотрю "Такая задача. Есть таблица в ней лежат данные упакованные в массивы varbinary." Расскажите, какой командой "извлечения данных" кроме select вы пользуетесь |
||
21 ноя 12, 11:46 [13505885] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
Прикольно. Вся база - в одном поле типа VARBINARY(MAX). Какая хорошая идея. |
21 ноя 12, 11:50 [13505928] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9687 |
А еще лучше вообще избавиться от упаковки/распаковки. |
||
21 ноя 12, 11:55 [13505970] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
ну как от цикла избавиться ума не приложу. но когда распаковываю данные могу формировать любой динамический sql - запрос. если данные не запаковывать в массивы, то БД очень быстро встанет. |
21 ноя 12, 12:03 [13506027] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9687 |
|
||||
21 ноя 12, 12:10 [13506101] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Ей делать нечего будет. Вот и будет стоять. |
||
21 ноя 12, 12:26 [13506255] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
MS SQL Server 2008 проблема описана выше. |
21 ноя 12, 12:33 [13506340] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9687 |
|
||
21 ноя 12, 12:36 [13506379] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
invm, в день допустим в БД поступает порядка 860000 тысяч записей. Одна запись три поля, общий объем одной записи 20 байт. через месяц у вас будет в табличке порядка 860000 * 31 = 26 660 000 записей. решений я нашел пару: 1 сжимать данные в массивы. 2 бить табличку на несколько. Но господа вопрос не в этом, вопрос в том как же произвести "серию быстрых" insert в табличку или выполнить вставку данных одним insert |
21 ноя 12, 12:39 [13506402] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11593 |
ТС, зачем же тогда так сервер РБД мучать? взяли бы себе файловую базу данных и писали бы файлики ![]() |
21 ноя 12, 12:41 [13506427] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
Konst_One, можете посоветовать нормальную файловую БД. а так работаем с тем что есть. |
21 ноя 12, 12:43 [13506452] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11593 |
это был намёк на непонятную реализацию вашей структуры хранения инфорамации. отсюда у вас и проблемы с её извлечением/использованием. подумайте ещё раз над архитектурой своего решения. |
21 ноя 12, 12:45 [13506478] Ответить | Цитировать Сообщить модератору |
mikola1982 Member Откуда: Сообщений: 587 |
думали много. писать с нуля хранение в файла дорого. пока решили использовать БД. Если, есть какие-то мысли по архитектуре с радостью выслушаю. но мы отошли от темы ИХМО |
21 ноя 12, 12:48 [13506521] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11593 |
почему же отошли? зачем вы реляционные данные пытаетесь запихнуть в одно поле varbinary, если вам нужно их потом вынимать от туда и как-то обрабатывать? |
21 ноя 12, 12:50 [13506547] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |