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

Откуда: Москва
Сообщений: 206
Есть вот такой работающий уже вариант:
PROCEDURE [dbo].[checkContractPartyExists]
	@sitDate varchar(max),
	@inXml XML,
	@out varchar(max) OUTPUT
AS
BEGIN
	
	CREATE TABLE #inTable (partyId varchar(255), contractId VARCHAR(255))
	CREATE TABLE #outTable (partyId varchar(255), contractId VARCHAR(255))

	INSERT INTO #inTable
	SELECT 
		Tbl.Col.value('./@id1', 'varchar(255)') partyId,  
		Tbl.Col.value('./@id2', 'varchar(255)') contractId
	FROM   @inXml.nodes('/row') Tbl(Col)
  ...

Будет ли парсинг данных во временную таблицу работать быстрее если переписать на парсинг csv(с помощью T-sql) а не XML?
18 дек 14, 13:47    [17016803]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxNevermind
Будет ли парсинг данных во временную таблицу работать быстрее если переписать на парсинг csv(с помощью T-sql) а не XML?

Вы спрашиваете, будет ли один произвольный код быстрее/медленнее другого произвольного кода ?
18 дек 14, 13:52    [17016851]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
Пример первого кода приведен
Второй код вероятно будет простой обход в цикле с поиском следующего места где встречается переход на новую строчку и инсертом во временную таблицу полученной строчи
Кол-во строк около 10 000, байт по 50 на каждую, ну если брать csv, для xml несколько больше.
18 дек 14, 14:02    [17016921]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxNevermind
Пример первого кода приведен
Второй код вероятно будет простой обход в цикле с поиском следующего места где встречается переход на новую строчку и инсертом во временную таблицу полученной строчи

И что вам мешает сравнить производительность ?
Или вы ищите тестеров ? Тогда это в форум Работа
18 дек 14, 14:03    [17016930]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
MaxNevermind
Пример первого кода приведен
Второй код вероятно будет простой обход в цикле с поиском следующего места где встречается переход на новую строчку и инсертом во временную таблицу полученной строчи
Кол-во строк около 10 000, байт по 50 на каждую, ну если брать csv, для xml несколько больше.


Это будет просто феерически медленно.
Нужно быстро, используйте то что было для этого специально создано, OPENXML, BULK INSERT.
18 дек 14, 14:09    [17016977]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Гузы
Guest
WarAnt
MaxNevermind
Пример первого кода приведен
Второй код вероятно будет простой обход в цикле с поиском следующего места где встречается переход на новую строчку и инсертом во временную таблицу полученной строчи
Кол-во строк около 10 000, байт по 50 на каждую, ну если брать csv, для xml несколько больше.


Это будет просто феерически медленно.
Нужно быстро, используйте то что было для этого специально создано, OPENXML, BULK INSERT.

На 10 000 строках? Моно ....но.
18 дек 14, 14:11    [17016999]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
Glory
MaxNevermind
Пример первого кода приведен
Второй код вероятно будет простой обход в цикле с поиском следующего места где встречается переход на новую строчку и инсертом во временную таблицу полученной строчи

И что вам мешает сравнить производительность ?
Или вы ищите тестеров ? Тогда это в форум Работа

Вечером проверю сам )
Я конечно не ждал четкого ответа, мне сказали что csv должен быть быстрей, а у меня сомнения.
Я не знаю как работает t-sql, компилируется ли он в нэтив код, у меня предположение что парсинг xml может опираться на какую-нибудь нэтив ф-ию, тогда возможно xml будет пошустрей.
18 дек 14, 14:21    [17017125]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Glory
Member

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

И csv и xml - это форматы данных.
Они не могут быть быстрее или медленнее по сравнению друг с другом.
Быстрее или медленнее может быть только ваши варианты кода.

MaxNevermind
Я не знаю как работает t-sql, компилируется ли он в нэтив код,

Не компилируется

MaxNevermind
у меня предположение что парсинг xml может опираться на какую-нибудь нэтив ф-ию, тогда возможно xml будет пошустрей.

Вы что хотите сравнить то ? .nodes() с substring() что ли ?
18 дек 14, 14:24    [17017162]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
Glory
MaxNevermind
у меня предположение что парсинг xml может опираться на какую-нибудь нэтив ф-ию, тогда возможно xml будет пошустрей.

Вы что хотите сравнить то ? .nodes() с substring() что ли ?


Нет, вопрос основан на реальной задаче, и в бой пойдет код который будет работать быстрей, интересует конечно время выполнения всего алгоритма а не отдельных его кусков.
18 дек 14, 14:30    [17017228]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
MaxNevermind
Glory
пропущено...

Вы что хотите сравнить то ? .nodes() с substring() что ли ?


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

Но вопрос мой конкретно по этой части алгоритма, дальше там пойдут запросы, они будут одинаковы для обоих вариантов.
18 дек 14, 14:32    [17017236]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Glory
Member

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

Алгоритм тоже надо придумать ?

MaxNevermind
Нет, вопрос основан на реальной задаче, и в бой пойдет код который будет работать быстрей,


BULK INSERT файла csv будет быстрее всех ваших вариантов.
И xml bulk load тоже будет быстрее.
А то, что предлагаете вы, это лишь известные вам способы решения
18 дек 14, 14:36    [17017260]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
Glory
MaxNevermind
интересует конечно время выполнения всего алгоритма а не отдельных его кусков.

Алгоритм тоже надо придумать ?

MaxNevermind
Нет, вопрос основан на реальной задаче, и в бой пойдет код который будет работать быстрей,


BULK INSERT файла csv будет быстрее всех ваших вариантов.
И xml bulk load тоже будет быстрее.
А то, что предлагаете вы, это лишь известные вам способы решения

Спасибо. Но как я понял при этом потребуется создание отдельных файлов для загрузки и запись их на диск, необходимо обойтись без этого, в хранимую процедуру должны передаваться сами данные, а не ссылка на них.
18 дек 14, 14:48    [17017371]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxNevermind
Но как я понял при этом потребуется создание отдельных файлов для загрузки

А у вас данные уже сразу в воздухе генерируются что ли ?
18 дек 14, 14:50    [17017387]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
Glory
MaxNevermind
Но как я понял при этом потребуется создание отдельных файлов для загрузки

А у вас данные уже сразу в воздухе генерируются что ли ?

Они формируются на сервере приложений путем обработки исходного файла, который содержит в разы больше данных, то что получилось в результате обработки держится в памяти и никуда не сохраняется, их задача и заключается только в этом запросе к хранимой процедуре, после получения ответа, файл передается третьей стороне.
18 дек 14, 14:54    [17017436]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Glory
Member

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

И что мешает тогда сразу добавлять эти данные в таблицу(ы) ?
18 дек 14, 14:57    [17017471]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
Glory
MaxNevermind
Они формируются на сервере приложений путем обработки исходного файла, который содержит в разы больше данных, то что получилось в результате обработки держится в памяти и никуда не сохраняется, их задача и заключается только в этом запросе к хранимой процедуре, после получения ответа, файл передается третьей стороне.

И что мешает тогда сразу добавлять эти данные в таблицу(ы) ?

Ну это вопрос нашим партнерам(третья сторона) :), это было бы архитектурно правильно, но задача поставлена так и вряд ли будет изменена.
18 дек 14, 15:01    [17017510]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxNevermind
Ну это вопрос нашим партнерам(третья сторона) :), это было бы архитектурно правильно, но задача поставлена так и вряд ли будет изменена.

Вы сделаете медленную фигню. Или одну медленную или вторую еще более медленную.
18 дек 14, 15:03    [17017525]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
Glory
MaxNevermind
Ну это вопрос нашим партнерам(третья сторона) :), это было бы архитектурно правильно, но задача поставлена так и вряд ли будет изменена.

Вы сделаете медленную фигню. Или одну медленную или вторую еще более медленную.

Что поделаешь, надо выбирать из того что можно.
18 дек 14, 15:06    [17017546]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Glory
Member

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

Ну так проведите тестирование и выбереит один из ваших двух медленных методов
Зачем для этого спрашивать мнение других ?
18 дек 14, 15:07    [17017555]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3695
Table valued parameters будет быстрее, чем XML.
18 дек 14, 17:00    [17018379]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
MaxNevermind
Спасибо. Но как я понял при этом потребуется создание отдельных файлов для загрузки и запись их на диск, необходимо обойтись без этого, в хранимую процедуру должны передаваться сами данные, а не ссылка на них.
BULK LOAD может работать прямо из приложения, непосредственно из памяти.

Думаю, парсинг CSV будет медленный, всё таки T-SQL для этого плохо приспособлен.

Потестируйте варианты с XML и Table valued parameter, думаю, из них что то подойдёт.
Если не хватит скорости, тогда попробуйте bulk из кода.
18 дек 14, 20:06    [17019210]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
MaxNevermind
Будет ли парсинг данных во временную таблицу работать быстрее если переписать на парсинг csv(с помощью T-sql) а не XML?


Около 8 лет назал я решал похожую задачу и эксперементировал. XML тогда ещё не было, парзинг CSV дал медленный результат по сравнению с партянкой INSERT, но BULK INSERT определённо был бы ещё быстрее. Я не смог его тогда задействовать и остановился на партянки INSERT, благо вставлять надо было цифры и можно было сгенерить эти INSERT без проблем.
18 дек 14, 20:55    [17019382]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Arm79
Table valued parameters будет быстрее, чем XML.
+1
18 дек 14, 22:35    [17019829]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
MaxNevermind
Member

Откуда: Москва
Сообщений: 206
alexeyvg
MaxNevermind
Спасибо. Но как я понял при этом потребуется создание отдельных файлов для загрузки и запись их на диск, необходимо обойтись без этого, в хранимую процедуру должны передаваться сами данные, а не ссылка на них.
BULK LOAD может работать прямо из приложения, непосредственно из памяти.

Думаю, парсинг CSV будет медленный, всё таки T-SQL для этого плохо приспособлен.

Потестируйте варианты с XML и Table valued parameter, думаю, из них что то подойдёт.
Если не хватит скорости, тогда попробуйте bulk из кода.

BULK LOAD это BULK INSERT? По-моему 'data_file' там обязательны параметр и это должен быть именно файл.
Table valued parameter нет в jdbc, два года уже не могут добавить судя по этому топику
18 дек 14, 23:44    [17020168]     Ответить | Цитировать Сообщить модератору
 Re: Что эфективней для пердачи большого кол-ва данных в хр. процедуру, csv или xml?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
MaxNevermind
BULK LOAD это BULK INSERT? По-моему 'data_file' там обязательны параметр и это должен быть именно файл.
Не обязательно.
Например, SSIS делает BULK LOAD не только из файлов, но и издругих источников, например, их оракла или сайбеса.

Это обеспечивается соответствующими API в средствах доступа.

Не знаю, как это делать из jdbc, вот например в .NET есть класс System.Data.SqlClient.SqlBulkCopy
В ODBC тоже можно, функции bcp_bind и bcp_sendrow.
См. Bulk Copy Data from Program Variables (ODBC) в хелпе

Может, и в jdbc есть?
18 дек 14, 23:55    [17020199]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить