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

Откуда:
Сообщений: 122
Есть такая задача.
Нужно на клиента передать большое количество записей (ну, скажем, 10^6) - результат запроса. Структура записей простая - в основном, числа.
Напрашивается вариант упаковки резалтсета запроса на сервере, передача данных на клиента, распаковки и сохранения. Т.е. все как обычно за исключением, что через сеть гоняются упакованные данные.

Есть функции на DLL для упаковки / распаковки, но они работают с блоб полями, а не с резалтсетом.

Что подскажете, есть ли какие-то решения для этого?
2 сен 09, 10:35    [7606695]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
не проще-ли порлучать результат частями, а не весь объём!? зачем на клиенте сразу (допустим) все записи, он работает ведь только с небольшой частью
2 сен 09, 10:41    [7606742]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Что-то я не понимаю, в чем проблема прогнать все это по сетке?!
2 сен 09, 10:42    [7606750]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
загнать резалтсет в блоб и вашей длл сжать.
но мне кажется , что вы что-то не то делаете.
2 сен 09, 10:43    [7606755]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
demav
Member

Откуда:
Сообщений: 122
На клиенте нужен весь объем данных, чтобы с ним уже работать - строить преобразования, выборки, фильтры и т.д. Т.е. сам пользователь, конечно же, не видит весь миллион записей. Но клиентской программе они нужны.
2 сен 09, 10:43    [7606758]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
строить преобразования, выборки, фильтры и т.д


Интересно, а зачем это все делать на клиенте, если у Вас данные на сервере?! 8-)
2 сен 09, 10:44    [7606766]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
demav
Member

Откуда:
Сообщений: 122
Ken@t
загнать резалтсет в блоб


Как это сделать?

По сетке перегонять очень медленнно. Т.е. пользователь, к примеру, сообщает - хочу получить данные за последний год (с тем, чтобы построить график, например). И ждет три минуты :)
2 сен 09, 10:45    [7606771]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
demav
Member

Откуда:
Сообщений: 122
pkarklin
Интересно, а зачем это все делать на клиенте, если у Вас данные на сервере?!


Да, вы правы - часть преобразований и так делается на сервере.

Но клиент должен работать в офлайне. Т.е. это не клиент в чистом виде - у него тоже есть база данных - локальная, куда должен сохраняться объем скаченных данных.
2 сен 09, 10:47    [7606793]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
demav
Member

Откуда:
Сообщений: 122
Видимо, надо изначально более подробно было рассказать про архитектуру.

Есть серверная база с очень большим объемом данных - центральная. И есть локальные базы (клиентские), куда надо передавать только тот объем данных, который разрешен.
А уже на локальных базах строятся выборки (без обращения к центральной базе).

И все таки - как
Ken@t
загнать резалтсет в блоб и вашей длл сжать.


:)
2 сен 09, 10:53    [7606836]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
demav
Есть серверная база с очень большим объемом данных - центральная.
И есть локальные базы (клиентские), куда надо передавать только тот объем данных, который разрешен.
Я н админ, но по-моему этот процесс "передавания" называется репликацией
2 сен 09, 10:55    [7606854]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Может вам на репликацию посмотреть?

Ну если уж хочется ваш вариант -- напишите CLR-процу, если сервер >= 2005, только учтите, что они плохо работают с большими объемами данных. CLR использует MemToLeave, и если будет отъедать много памяти, сервер начнет ваши сборки выгружать.
2 сен 09, 10:57    [7606864]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Паганель
demav
Есть серверная база с очень большим объемом данных - центральная.
И есть локальные базы (клиентские), куда надо передавать только тот объем данных, который разрешен.
Я н админ, но по-моему этот процесс "передавания" называется репликацией


Репликация — это процесс совместного использования данных в базах, расположенных в разных местах.

Я не уверен, что автору это подойдет, локальным БД нужны типовые наборы данных или каждый раз условие выборки будет изменяться?
2 сен 09, 11:01    [7606906]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
demav
Member

Откуда:
Сообщений: 122
DENIS_CHEL

Я не уверен, что автору это подойдет, локальным БД нужны типовые наборы данных или каждый раз условие выборки будет изменяться?


Да, для разных "клиентов" доступны будут разные данные. Более того, часть преобразований делается на сервере, но резалтсет будет большой. Т.е. это даже не передача данных на "клиента", а передача результатов выполнения, скажем, хранимой процедуры - но с очень большим объемом.

Я не отрицаю, что архитектура может быть неудачная (хотя, пока других вариантов не вижу).

Но сейчас озабочен именно тем, как сделать упаковку / распаковку. Какие могут быть варианты?
2 сен 09, 11:08    [7606958]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
demav
Member

Откуда:
Сообщений: 122
Ray D
напишите CLR-процу.


Морально готов это сделать. Но по тем примерам, которые нашел - все они упаковывают только одно поле. А как упаковать резалтсет в один упакованный блоб?

Есть ли примеры? Сорри, в .NET я ламер :(
2 сен 09, 11:10    [7606969]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
У вас это происходит в локальной сети?

Если нет, я бы предложил CLR зборку, которая результаты работы ХП льет , ну скажем в dbf, тот пакуется 7.z и отсылается.

Минусы 1) долгая обработка. 2) Нуно програмировать...
Плюсы экономия трафика и времени передачи (если канал узкий, то можно да же не учитывать 1 минус).
2 сен 09, 11:20    [7607042]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Про репликацию все таки не думаеете почитать?

Ну вот пример, который блобы упаковывает/распаковывает:
http://scherbinin.blog.ru/58761875.html

С резалтсетом -- в хранимке создать контекстное соединение, вытащить данные, сериализовать и упаковать. Вот только помрет оно с очень большой вероятность на больших объемах данных.
2 сен 09, 11:22    [7607054]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
А такой вариант --
Сделайте джоб, который будет с некоторой периодичностью пускать хранимку и сохранять результаты в таблицу, это таблицу реплицируйте транзакционной репликацией.
2 сен 09, 11:25    [7607085]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
demav
Member

Откуда:
Сообщений: 122
Нет, не по локальной сети, а ч/з интернет.

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

Насчет репликации подумаю, т.к. вариант "помрет с большой вероятностью" не подходит :)

Всем спасибо за советы!
2 сен 09, 11:29    [7607114]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Преобразуйте резалтсет в xml пакет на сервере, а уж потом делайте с ним что угодно, упаковывайте и отправляйте как блоб:)
2 сен 09, 11:31    [7607130]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
demav
Member

Откуда:
Сообщений: 122
WarAnt
Преобразуйте резалтсет в xml пакет на сервере, а уж потом делайте с ним что угодно, упаковывайте и отправляйте как блоб:)


Когда-то во времена MSSQL 2000 с XML было невозможно работать.
Сейчас надо проверить что там есть новенького.

Про XML думал, но он изначально имеет больший объем, нежели двоичные данные. И есть предположение, что и архив тоже будет больше.

И не помрет ли такая схема на больших объемах? :)
2 сен 09, 11:36    [7607160]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
demav,

Ну никто не заставляет весь миллион записей паковать в один xml можно сделать 100 xml пакетов циклом и все сто передать по очереди на клиента, предвартельно упаковав каждый в архив что уменьшит размер раза в 4(зависит от упаковщика).
А в 2000 есть некоторые заморочки с получением сгенерированного сервером xmlя но они все благополоучно решаются:)
2 сен 09, 11:52    [7607291]     Ответить | Цитировать Сообщить модератору
 Re: упаковка данных  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
demav,
CREATE TABLE dbo.ResultSet 
(
  Title nvarchar(128),
  Body image 
  
)
GO 

exec xp_cmdshell 'bcp "select MOSS_ID, MOSS_RevisionID, MOSS_Type, TFS_ID, TFS_RevisionID from [IT].[Enterprise Support DB].dbo.Map_TFSItem_MOSSItem" queryout d:\frombcp.txt -w  -C 1251 -r -T'

INSERT INTO dbo.ResultSet (Title, Body ) 
SELECT 'myresultset' AS Title, *
FROM OPENROWSET(BULK N'D:\frombcp.txt', SINGLE_BLOB) AS Body
GO


SELECT Title, Body  from  dbo.ResultSet 
GO

DROP TABLE dbo.ResultSet 
go

вот так можно, на уровне ОС можно и пакануть зипом, bcp умеет и в хмл выводить.
2 сен 09, 12:17    [7607470]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить