2010-09-14 2 views
1

мое приложение для Windows читает текстовый файл и вставляет его в базу данных. Проблема в текстовом файле чрезвычайно велика (по крайней мере, для наших младших машин). Он содержит 100 тысяч строк, и требуется время, чтобы записать его в базу данных.Как эффективно писать данные в базе данных с помощью C#?

Можете ли вы, ребята, сказать, как я должен эффективно читать и писать данные, чтобы он не зависал машинной памяти? FYI ... Обозначение столбца: '|' Row разделитель: NewLine

Он имеет около 10 колонок .. (Он имеет информацию о клиентах ... как фамилия, имя, адрес, телефоны, электронная почта и т.д.)

считает, что ... Я ОГРАНИЧИВАЯСЬ ​​ОТ ИСПОЛЬЗОВАНИЯ БОЛЬШИХ CMD.

+0

В чем вы работаете? – RedFilter

+1

На самом деле это память "hogging"? Или это работает медленно? Или оба? (они часто представляют собой две дискретные проблемы) –

+0

@kirk. Я считаю, что оба. Но машины также являются низкоконцентрированными целеронами. – Jango

ответ

3

Вы не говорите, какую базу данных вы используете, но если это SQL Server, тогда вы должны заглянуть в команду BULK INSERT или служебную программу BCP.

+0

Привет, это еще одна проблема. Раньше я использовал SP с использованием Bulk insert ... проблема теперь не могу сбрасывать текстовый файл на нашем сервере базы данных по соображениям безопасности .. Весь план состоит в том, чтобы читать текстовый файл и писать это в таблицу temp и вызвать мой существующий SP, который, наконец, запишет его в базу данных с помощью нашей бизнес-логики. – Jango

+1

@Crawling. Возможно, вы могли бы поговорить с людьми безопасности, чтобы позволить серверу базы данных получить доступ к сетевому ресурсу, который может быть использован для целей данные объемной загрузки. Это было бы (скорее всего) быстрее, чем отдельные вставки. –

0

Учитывая, что нет абсолютно никаких шансов получить помощь от ваших людей, безопасности и с помощью команды BULK, вот такой подход я бы:

  1. Убедитесь, что вы в первом чтении весь текстовый файл перед вставкой в базу данных. Таким образом, сокращение ввода-вывода.

  2. Проверьте, какие индексы у вас есть в таблице адресатов. Можете ли вы вставить во временную таблицу без индексов или зависимостей, чтобы отдельные вставки были быстрыми?

  3. Должны ли эти данные быть видимыми сразу после вставки? Если нет, вы можете иметь запланированное задание для чтения из таблицы temp на шаге 2 выше и вставить в таблицу назначения (имеющую индексы, внешние ключи и т. Д.).

+0

Кто скажет, что файл поместится в памяти? Попытка сделать его пригодным может привести к сбою программы или запугиванию из-за замены. –

+0

@Steven Sudit - Это хороший момент! Тогда подход заключался бы в том, чтобы разбить файл на что-то, что будет работать на машинах низкого уровня. –

+0

Только проблема, я сталкиваюсь с прочитанным текстовым файлом. Если я прочитал его сразу, это дает проблемы на низкопроизводительных машинах. Предложите мне, что мне делать здесь? – Jango

0

Возможно ли, что вы создали register свою сборку на Sql-сервере? (Я предполагаю, что это sql-сервер, потому что вы уже сказали, что раньше вы использовали встроенную вставку).

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

Это не вариант, который мне нравится, но иногда это может быть заставка.

+0

Его длинная история. Мое приложение было на веб-сервере. Работа в качестве файла наблюдателя ... Входит файл ... прочитайте его и проверьте целостность файла и вызовите хранимую процедуру и передайте ftp, информацию о местоположении файла ... теперь хранимая процедура возвращается веб-сервер ... захватывает файл, используя ftp-вызов ... и записывает файл обратно на сервер Db, а затем делает объемную вставку и т. д. Итак, теперь проблема SP - это Windows FTP .... что не является SSL. Из соображений безопасности ... теперь FTP-вызов SP не завершается. Поэтому я не могу много сделать на сервере БД. – Jango

+0

Вы можете запустить FTP через SSH. –

Смежные вопросы