Импорт текстового файла в общую базу данных с использованием SQL - PullRequest
1 голос
/ 07 октября 2008

В настоящее время я пытаюсь импортировать текстовый файл с разделителями-запятыми в базу данных на c #, используя OleDb, где я не знаю тип (SQL Server, Access, Oracle, MySQL, postgreSQL и т. Д.). чтение в файле в качестве базы данных с использованием программы чтения текста Jet, затем создание подготовленного оператора вставки, заполнение полей и фиксация в конце. Хотя это работает, это медленно и для миллионов строк, это занимает слишком много времени.

Итак, мой вопрос: есть ли у кого-нибудь еще мысли о том, как лучше всего импортировать текстовый файл в общую базу данных, или комментарии о моих подходах, которые приведут к более быстрому импорту?

Я не могу использовать сторонние библиотеки или программное обеспечение для этого, так как это часть более крупного проекта

Ответы [ 5 ]

1 голос
/ 08 октября 2008

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

Dataset.Tables[x].ImportRow(DataRow)

Конечно, теперь он просто работает с DataAdapter.Update (Dataset). Глядя онлайн, это будет весело ...

Обновление

Этот метод не дает более быстрых результатов, поскольку команда DataAdapter.Update выполняет построчную вставку.

1 голос
/ 07 октября 2008

Попробуйте это

http://filehelpers.sourceforge.net

.... почему вы хотите загрузить базу данных в набор данных? Попросите другую базу данных отслеживать уникальность (если есть такое слово). При импорте проверьте, существует ли в базе данных журналов, если нет, затем загрузите в общую базу данных.

Подождите, пока другие ответы на эту тему, мы можем получить лучшую идею.

1 голос
/ 07 октября 2008

Не совсем элегантно, но производительность может быть лучше:

  • загрузка всего файла в таблицу с одним столбцом "Строка" в виде длинного текста (аналогично тому, что вы делаете сейчас локально
  • использовать хранимые процедуры для разделения полей и создания вставок
  • выполнить вставки на сервере

Хотя вы по-прежнему вставляете каждую строку отдельно, вы не будете создавать такой большой сетевой трафик.

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

«Правильным» решением было бы использование специального инструмента импорта базы данных (например, SQL Loader for Oracle). Прирост производительности огромен. (Мы загружаем огромные таблицы с 20 миллионами строк примерно за 5 минут). Но, конечно, это не очень общий характер.

0 голосов
/ 29 мая 2009

BULK INSERT dbo.ImportTest ОТ 'C: \ ImportData.txt' WITH (FIELDTERMINATOR = ',', FIRSTROW = 2)

0 голосов
/ 07 октября 2008

Лучше всего купить готовое приложение для этого.

Professional Off Приложения Shelf используют собственные драйверы и тонкую настройку для каждого типа источника данных, с которым они столкнутся. Это всегда под прикрытием, поэтому вы не видите, как они это делают. Например, массовая копия используется против SQL Server; У Oracle есть Data Pump.

Проблема с прокруткой самостоятельно заключается в том, что вы можете потратить деньги на точную настройку приложения для работы с каждым из типов источников, с которыми вы можете столкнуться, ИЛИ вы получите огромный удар по производительности, используя общий ODBC / ADO / Какими бы ни были водители.

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

Итак, сколько у вас денег на ресурсы для развития?

...