2016-05-28 7 views
1

Мне нужно вставить 40 миллионов записей из файла .csv в базу данных, а ниже - процесс, за которым я последовал.Каков правильный способ вставить миллионы записей из файла csv в базу данных SQL Server?

  • Windows Service 1:

    • Чтение CSV
    • проверки записей
    • вставки действительных записей в таблице успеха (промежуточный стол) с использованием SqlBulkCopy.
  • Windows Service 2.

    • Получение 10 000 записей из таблицы успеха в то время
    • работает Еогеасп для этих 10 000
    • представляемых каждую запись в базу данных для вставки в основном Таблица.

Windows Service 1 занимает около 30-40 мин, а окна обслуживания 2 занимает около 5 часов, чтобы выполнить поставленную задачу (минимальное время). У меня есть 2 способа сделать это, но не могу решить, что лучше и открыто для предложений.

  1. Создание 4 отдельные службы окон и обработки 40000 записей одновременно
  2. Используя часы задания можно использовать в то время как цикл
  3. Вызов процедуры асинхр из окон службы

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

+0

Миллионы? SqlBulkCopy - единственный. 'запуск foreach', вероятно, является слабым местом. Если вы используете курсоры, переписывайте запрос так, чтобы он был установлен на основе. –

+0

Мы используем sqlbulkcopy в службе 1 Windows, но мы выполняем определенную проверку во второй процедуре обслуживания Windows, поэтому не можем использовать bulkcopy. Другое дело, что она заключается в том, что, когда мы используем массовую копию, можно предположить, что набор из 1 lakh записей будет вставлен одновременно используя объемную копию sql, тогда даже если одна запись не удалась, мне нужно зарегистрировать это или по крайней мере нужно знать, какая запись имеет эту ошибку, следовательно, это невозможно с помощью bulkcopy. – sainath

+1

Бит, если используется другой подход, но это ничего не значит для SSIS?У служб интеграции есть встроенная вставка, в которой вы можете преобразовать середину. Я очень сомневаюсь, что в SSIS понадобится более часа. – Caz1224

ответ

2

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

Я угадываю здесь, но эти таблицы посередине должны преобразовывать или проверять, или, может быть, переносить импорт вниз?

SSIS может использовать все эти функции, используя лимит журнала и инструменты SQL Bulk Import. В настоящее время я делаю импорт данных в больницу, который составляет около 8 000 000 записей каждую ночь, и мне требуется несколько минут, чтобы не делать часы.

Хорошо читать тоже вокруг как SQL сделок с такими большими входами данных является this article

+0

В настоящее время я смотрю на ssis и никогда не использовал его раньше, чтобы такие статьи мне очень помогли (теперь смотрят на результаты поиска YouTube и google). Промежуточная таблица используется, потому что у нас есть значения в файле csv, которые связаны с другой таблице, и нам нужно вставить этот первичный ключ в основную таблицу (например, у нас есть имя из csv, и мы вставляем имя в эту промежуточную таблицу, а затем обновляем первичный ключ для этого пользователя в этой таблице и вставляем только первичный ключ в вторая таблица) – sainath

+0

Ах, да, у меня есть эта проблема и в моем наборе данных. Current Я запускаю команду SQL, которая изменяет мою таблицу назначения, удалил PK и установил ее в конце пакета. Я знаю, что это немного рискованно, но у меня есть кластеризованный индекс на этой таблице, и чтобы создать другой, он будет переваривать время вычисления. Если у вас есть множественная оценка, у него есть отличные вещи SSIS там – Caz1224

+0

В настоящее время у нас нет SSIS и множественного числа, установленных в нашей системе, есть ли у нас какие-либо другие способы сделать это, потому что создание команды sql в порядке, но поскольку его проект банка не может принять этот риск так как проверка этих учетных записей снова является трудной задачей для меня. Полностью потерянный сейчас и думающий о написании 10 оконных сервисов любые предложения – sainath