Загрузить в БД, а затем проверить или проверить каждую строку, а затем загрузить в БД - PullRequest
4 голосов
/ 09 января 2012

У меня есть требование, где я должен загрузить файл в БД. Файл будет иметь около 100 тыс. Записей в день и по одной в месяц от 8 до 10 миллионов записей.

Также необходимо выполнить некоторые проверки на уровне поля.

проверки такие: все поля присутствуют, поле номера содержит действительное число, дата содержит действительную дату, число в указанном диапазоне, соответствует формат строки и т. Д.

Есть 3 способа.

1: Upload to temp and then validate
- Create a temp table (all string columns), have extra error column
- upload all entries to temp table
- run validation, populate error column if needed
- move valid entries to correct table

Минусы: записи должны быть записаны дважды в дБ, даже правильные.

2: Upload to db directly
- upload all entries directly to table
- check which entries are not uploaded

Минусы: нужно читать каждую строку даже после загрузки, так же хорошо, как двойное чтение

3: Validate and then Upload
- read each line, run all validations on all columns
- if valid then write to db

Минусы: чтение файла должно быть медленнее, чем массовая загрузка в БД.

Я пишу приложение на: C # и ASP.NET, БД - это Oracle.

Какой из 3 способов лучше?

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Я пойду с вариантом 2.

100 тыс. Строк: арахис для массового производства и проверки запроса.

1 голос
/ 09 января 2012

Как говорит @aF, вариант 2 со следующим дополнением:
Добавьте таблицу, в которую вы можете записать «недопустимые» строки.Затем выполните оператор, подобный следующему:

INSERT INTO InvalidData
SELECT *
FROM InputData
WHERE restrictedColumn NOT IN ('A', 'B')
OR NOT IS_NUMERIC(numberColumn)  -- I'm assuming some version of SQL Server...

, затем выведите «проверенные» строки в вашу фактическую таблицу, исключая «недопустимые» строки:

INSERT INTO Destination
SELECT a.*
FROM InputData as a
EXCEPTION JOIN InvalidData as b
ON b.id = a.id

INSERT завершится ошибкой, есливстречаются любые (другие) «недействительные» данные, но их следует обнаружить.Затем можно обработать «недопустимую» таблицу для очистки и повторной вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...