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

Откуда:
Сообщений: 387
История такая - есть интерфейс массовой выгрузки данных из базы MS SQL : простой - дергается хранимка и выдает рекордсет. Вызов хранимки и получение данных делается приложением приемником (отличное от MS SQL).
Теперь понадобилось приложение приемник поставить в удаленном месте (связь по WAN , интернет) . Задержка там 10-50 миллисекунд. Чтение курсором понятно будет идти медленно.
Понятно что придется переделывать транспорт, но хотелось бы сделать это минимальными усилиями.
Вариант 1 Сериализовать выборку в XML (или более компактный формат) и получать ее порциями скажем по 1000 записей с квитированием. Вопрос - а есть ли в MS SQL готовый инструмент для таких целей ?
Вариант 2 Перейти на обмен сообщениями - для массовой загрузки (узел -узел ) не очень подходит, так как нужно развертывать middleware типа rabbit mq либо веб сервер, а это избыточно.
Вариант 3 С выкладыванием и переброской файлов через почтовые сервера или http. Хотелось бы обойтись без файлов, чтобы не заниматься его копированием на жесткий диск, а формировать и отсылать пакет записей прямо из памяти.

Сергей С
9 окт 15, 13:56    [18258642]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
Glory
Member

Откуда:
Сообщений: 104751
selis76
Вариант 1 Сериализовать выборку в XML (или более компактный формат) и получать ее порциями скажем по 1000 записей с квитированием. Вопрос - а есть ли в MS SQL готовый инструмент для таких целей ?

Такой механизм есть у клиента. называется он клиентский курсор
9 окт 15, 13:59    [18258663]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
selis76
Member

Откуда:
Сообщений: 387
https://technet.microsoft.com/ru-ru/library/ms189546(v=sql.105).aspx
А что будет если я миллион записей попытаюсь считать? Как понял клиентский курсор все тянет в память разом - не вылетит?
9 окт 15, 14:20    [18258816]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
Glory
Member

Откуда:
Сообщений: 104751
selis76
https://technet.microsoft.com/ru-ru/library/ms189546(v=sql.105).aspx
А что будет если я миллион записей попытаюсь считать? Как понял клиентский курсор все тянет в память разом - не вылетит?

Ошибся. Серверный курсор вам нужен
9 окт 15, 14:23    [18258831]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
ADO по-моему организует что-то вроде курсора и вытаскивает по одной записи в каком-то из-своих режимов. Если не в рекордсет загружать, а выполнять READ.
9 окт 15, 17:20    [18259903]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
selis76
История такая - есть интерфейс массовой выгрузки данных из базы MS SQL : простой - дергается хранимка и выдает рекордсет. Вызов хранимки и получение данных делается приложением приемником (отличное от MS SQL).
Теперь понадобилось приложение приемник поставить в удаленном месте (связь по WAN , интернет) . Задержка там 10-50 миллисекунд. Чтение курсором понятно будет идти медленно.
Понятно что придется переделывать транспорт, но хотелось бы сделать это минимальными усилиями.
Вариант 1 Сериализовать выборку в XML (или более компактный формат) и получать ее порциями скажем по 1000 записей с квитированием. Вопрос - а есть ли в MS SQL готовый инструмент для таких целей ?
Вариант 2 Перейти на обмен сообщениями - для массовой загрузки (узел -узел ) не очень подходит, так как нужно развертывать middleware типа rabbit mq либо веб сервер, а это избыточно.
Вариант 3 С выкладыванием и переброской файлов через почтовые сервера или http. Хотелось бы обойтись без файлов, чтобы не заниматься его копированием на жесткий диск, а формировать и отсылать пакет записей прямо из памяти.

Сергей С
Нужно сначала изучить работу приложения (и механизма дерганья процедуры и получения рекордсета) с сетью с большой задержкой.

В протоколах и библиотеках уже предусмотрена буферизация, так что может не так плохо будет работать. Но нужно поэксперементировать, посмотреть настройки (всякие размеры буферов), посмотреть методы работы приложения с сиквелом.

То есть в принципе задача сводится к тому, что бы понять, какие из существующих протоколов лучше подходят к сетям с большой латентностью.
9 окт 15, 19:16    [18260349]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
alexeyvg
Но нужно поэксперементировать, посмотреть настройки (всякие размеры буферов), посмотреть методы работы приложения с сиквелом.
В частности, в сиквеле есть настройка Network Packet Size, в ADO.NET есть параметр коннекта Packet Size
9 окт 15, 19:30    [18260403]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
selis76
https://technet.microsoft.com/ru-ru/library/ms189546(v=sql.105).aspx
А что будет если я миллион записей попытаюсь считать? Как понял клиентский курсор все тянет в память разом - не вылетит?


ето не проблем скл серввера

в каком же язык в исползуете клиентский приложениии например mvc,java там будете оптимизироват ваших запросы

а причем здес скл сервер
10 окт 15, 00:18    [18261598]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53747
selis76
А что будет если я миллион записей попытаюсь считать?

Увольнение за профнепригодность.
10 окт 15, 14:04    [18262321]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
selis76
https://technet.microsoft.com/ru-ru/library/ms189546(v=sql.105).aspx
А что будет если я миллион записей попытаюсь считать? Как понял клиентский курсор все тянет в память разом - не вылетит?


ты понял неверно.
10 окт 15, 18:20    [18262667]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
aleks2
Guest
selis76
История такая - есть интерфейс массовой выгрузки данных из базы MS SQL : простой - дергается хранимка и выдает рекордсет. Вызов хранимки и получение данных делается приложением приемником (отличное от MS SQL).
Теперь понадобилось приложение приемник поставить в удаленном месте (связь по WAN , интернет) . Задержка там 10-50 миллисекунд. Чтение курсором понятно будет идти медленно.
Понятно что придется переделывать транспорт, но хотелось бы сделать это минимальными усилиями.
Вариант 1 Сериализовать выборку в XML (или более компактный формат) и получать ее порциями скажем по 1000 записей с квитированием. Вопрос - а есть ли в MS SQL готовый инструмент для таких целей ?
Вариант 2 Перейти на обмен сообщениями - для массовой загрузки (узел -узел ) не очень подходит, так как нужно развертывать middleware типа rabbit mq либо веб сервер, а это избыточно.
Вариант 3 С выкладыванием и переброской файлов через почтовые сервера или http. Хотелось бы обойтись без файлов, чтобы не заниматься его копированием на жесткий диск, а формировать и отсылать пакет записей прямо из памяти.

Сергей С


Хе-хе. А чо есть "чудесные способы чтения"?
Осознай банальную истину: для передачи X байт данных через сеть нужно ОДИНАКОВОЕ количество времени, независимо от транспорта.

И обычный recordset ADO делает это наилучшим образом.
Т.е. показывает сразу первые записи и тянет в фоне все остальные.
11 окт 15, 12:24    [18264027]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
selis76
Member

Откуда:
Сообщений: 387
aleks2
Хе-хе. А чо есть "чудесные способы чтения"?
Осознай банальную истину: для передачи X байт данных через сеть нужно ОДИНАКОВОЕ количество времени, независимо от транспорта.

И обычный recordset ADO делает это наилучшим образом.
Т.е. показывает сразу первые записи и тянет в фоне все остальные.

Чтение рекордсета это последовательность запросов fetch - и на каждый такой запрос возращается запись. А теперь представь что у тебя задержка на пакет увеличилась с <1мс до 30-40 мс, потому что это WAN и пакеты летают гораздо медленней из за расстояний, большего количества рутеров, и ограничены скоростью света. В этом случае скорость передачи запрос-ответ упадет ниже первого этажа. Поэтому единственный способ либо отсылать более крупные блоки на один пакет запроса, либо параллелить отсылку занимая полосу пропускания.
12 окт 15, 11:31    [18266460]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к SQL Server по WAN, Internet  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
selis76
Чтение рекордсета это последовательность запросов fetch - и на каждый такой запрос возращается запись.
Ну, не совсем так. fetch, разумеется, делается из буфера, и при каждом fetch не происходит обращения к серверу (по крайней мере, для определённых видов курсоров). Иначе было бы совсем медленно даже на быстрых соединениях.
aleks2
Осознай банальную истину: для передачи X байт данных через сеть нужно ОДИНАКОВОЕ количество времени, независимо от транспорта.
Очевидно, разные протоколы верхнего уровня могут показать разную скорость передачи данных, при одинаковой скорости канала, но при разной латентности.
Это видно при передаче данных разными способами, разниуа может быть огромна.

И я нигде не видел исследований, тестов, подтверждающих это утверждение: "обычный recordset ADO делает это наилучшим образом". Протокол FTP, например, может быть в случае высоких задержек и быстрее.
12 окт 15, 11:39    [18266535]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить