Должен ли я использовать SSIS или многопоточное приложение C# для загрузки плоских файлов в базу данных?

StackOverflow https://stackoverflow.com/questions/146732

  •  02-07-2019
  •  | 
  •  

Вопрос

В службах интеграции SQL Server (SSIS) есть возможность настроить соединение с плоским файлом, который может содержать миллионы записей, и перенести эти данные в базу данных SQL.Кроме того, этот процесс можно вызвать из приложения C#, указав и используя пространство имен Microsoft.SqlServer.Dts.Runtime.

Будет ли плоский файл с миллионами записей лучше всего запускаться с помощью SSIS, или коллектив «вы» предпочтет приложение С# с несколькими рабочими потоками (один для чтения и добавления строки в переменную, другой для записи из этой переменной в БД) и «материнский» класс, который управляет этими потоками?(в блоке разработчика два процессора)

Я видел эти данные(блог команды sql), утверждая, что для плоского файла с миллионом строк SSIS является самым быстрым:

Process                Duration (ms)
--------------------   -------------
SSIS - FastParse ON         7322 ms 
SSIS - FastParse OFF        8387 ms 
Bulk Insert                10534 ms 
OpenRowset                 10687 ms 
BCP                        14922 ms

Что ты думаешь?

Это было полезно?

Решение

Я могу говорить только за себя и свой опыт.Я бы выбрал SSIS, поскольку это один из тех случаев, когда вы можете без необходимости заново изобретать велосипед.Это повторяющаяся задача, которая уже решена SSIS.

У меня около 57 рабочих мест (сочетание DTS и SSIS), которыми я управляю ежедневно.Четыре из них обычно экспортируют от 5 до 100 миллионов записей.База данных, которой я управляю, содержит около 2 миллиардов строк.Я использовал задачу-скрипт для добавления даты с точностью до миллисекунды, чтобы можно было запускать задания несколько раз в день.Делаю это уже около 22 месяцев.Это было здорово!

Задания SSIS также можно запланировать.Так что вы можете установить его и забыть.Я отслеживаю все каждый день, но часть обработки файлов ни разу не сломалась.

Единственный раз, когда мне приходилось прибегать к специальной программе на C#, это когда мне нужно было разделить очень большие файлы на более мелкие фрагменты.SSIS очень медленно справляется с такими вещами.Для разделения текстового файла объемом один гигабайт потребовалось около часа с использованием задачи сценария.Специальная программа C# справилась с этим за 12 минут.

В конце концов, просто используйте то, что вам удобно.

Другие советы

SSIS невероятно быстр.Кроме того, если что-то должно происходить неоднократно, вы можете настроить агент на его запуск по расписанию.Написать его самостоятельно — это одно, а попытаться сделать его многопоточным оказывается намного сложнее, чем кажется на первый взгляд.

Я бы рекомендовал SSIS в 9 случаях из десяти.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top