2009-02-12 3 views
1

У меня есть большая база данных и вы хотите реализовать функцию, которая позволит пользователю делать массовое обновление информации. Пользователь загружает файл excel, вносит изменения, и система принимает файл excel.Какой метод проверки данных наиболее подходит для больших наборов данных

  1. Пользователь использует веб-интерфейс (ASP.NET) для загрузки данных из базы данных в Excel.
  2. Пользователь изменяет файл Excel. Разрешается изменять только определенные данные в качестве другой карты в БД.
  3. После того, как пользователь доволен своими изменениями, они загружают измененный файл Excel через интерфейс ASP.NET.
  4. Теперь задача сервера заключается в том, чтобы сосать данные из файла Excel (используя Gembox) и проверять данные по базе данных (вот где я столкнулся с проблемой)
  5. Результаты проверки показаны на другой странице ASP.NET после завершения проверки. Валидация мягкая и так сильно не работает только происходят, когда говорят, что отображение индекса в БД отсутствует. (Отсутствующие данные приводят к игнорированию и т. Д.)
  6. Пользователь может решить, подходят ли действия, которые будут предприняты, при их принятии система будет применять изменения. (Добавить, изменить или игнорировать)

Перед внесением изменений и/или дополнений, сделанных пользователем, данные должны быть проверены во избежание ошибок пользователя. (Случайно удаленные даты, которые они не имели в виду)

Это не очень удобно для строк, для которых требуется обновление, чтобы достичь более 65 тыс.

Вопрос: Каков наилучший способ анализа данных для проверки и создания наборов изменений и дополнений?

Если я загружаю все данные, которые данные Excel должны быть проверены в память, я мог бы без необходимости влиять на и без того голодное приложение. Если я делаю попадание базы данных для каждого кортежа в файле excel, я просматриваю более 65 тыс. Запросов к базе данных.

Помогите?

+0

Как вы получаете информацию из файла excel в базу данных? OWC? Инструмент импорта данных? Эффект ответа. – jcollum

+0

с использованием Gembox для чтения данных по строкам. – Llyle

ответ

3

Подход, который я видел используемый в прошлом:

  1. Bulk-загрузить данные пользователя в таблицу «нуля» в базе данных.
  2. Проверка данных в таблице царапин с помощью одной хранимой процедуры (выполнение серии запросов), маркировка строк, которые не проверяют проверку, требуют обновления и т. Д.
  3. Действия над отмеченными строками.

Это хорошо работает для проверки отсутствующих столбцов, допустимых значений ключа и т. Д. Это не так хорошо для проверки формата отдельных полей (не делайте SQL pull strings отдельно).

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

+0

Чтобы загрузить данные в базу данных, это не потребует инструкций ~ 65k INSERT? – Llyle

+1

@vanslly - у большинства dbs есть функция массовой загрузки - в SQL Server вы можете использовать SqlBulkCopy, например. Это использует поток TDS для максимально быстрой передачи в таблицу царапин. –

0

Чтобы ответить на этот вопрос правильно следующая информация будет полезна

  1. Как вы собираетесь уведомить пользователя о неудачах?
  2. Будет ли один отказ в результате проверки при загрузке 64999 записей или нет?
+0

1. Через графический интерфейс ASP.NET. 2. Мягкий сбой. 1 отказ от проверки означает, что 65k-1 преуспевает. – Llyle

1

Ваша проблема очень часто встречается в системах хранилищ данных, где массовая загрузка и очистка данных являются основной частью (обычной) работы, которая должна быть выполнена. Я предлагаю вам google вокруг ETL (Extract Transform Load), Staging tables, и вы найдете множество хороших вещей.

В широком ответе на вашу проблему, если вы выполняете «загрузку данных в память» для проверки, вы фактически повторно внедряете часть механизма БД в свой собственный код. Теперь это может быть хорошо, если это быстрее и умнее. Например, у вас может быть только небольшой диапазон допустимых дат для вашего Excel-экстракт, поэтому вам не нужно присоединяться к таблице, чтобы проверить, что даты находятся в зоне действия. Однако для других данных, таких как внешние ключи и т. Д., Пусть БД делает то, что хорошо.

Использование промежуточного стола/базы данных/сервера является распространенным решением по мере увеличения объемов данных. BTW, позволяющая пользователям чистить данные в Excel, действительно хорошая идея, позволяющая им «случайно» удалить важные данные - действительно плохая идея. Можете ли вы заблокировать ячейки/столбцы, чтобы предотвратить это, и/или поместить некоторые основные проверки в Excel. Если поле должно быть заполнено и должно быть датой, вы можете проверить это в нескольких строках excel. Ваши пользователи будут счастливы, так как им не нужно загружать файлы до поиска проблем.

0

первый магазин в таблице темп из текстовых файлов с использованием массовой загрузки. затем извлекает это и проверяет с помощью сделанного интерфейса. и после проверки сохраните его в основной таблице или DB

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