У меня есть сценарий, в котором данные должны быть импортированы из файла CSV через приложение .NET в SQL Server 2008 на сервере базы данных (распределено). Файл CSV содержит около 4 миллиона записей ', в то время как таблица назначения может содержать более 100 миллионов записей. Данные, которые импортируются, должны быть проверены на наличие существующих данных для дубликатов до того, как вставка будет выполнена.Высокопроизводительная архитектура для сценария dataimport?
Я попытался создать DataTable в памяти и отправить это как параметр хранимой процедуре, однако это очень плохо.
Что такое хороший подход для этого сценария?
- данных для импорта (
importdata
) должен быть отправлен в SQL Server importdata
необходимо проверить Agains существующие данные (existing
) для дубликатов- если только один дубликат найден в
existing
весь импорт дляimportdata
должна быть прервана
Формат CSV
"Name1", "11111111-1111-1111-1111-111111111111"
"Name1", "11111111-1111-1111-1111-111111111111"
"Name1", "11111111-1111-1111-1111-111111111111"
данных для импорта (DataTable формат схематично):
Table (
name nvarchar(20),
someId uniqueidentifier
)
Таблица назначения на SQL Server (схематично):
Table (
id int primarykey,
name nvarchar(20),
someId uniqueidentifier
)
CsvReader (код-проект), затем SqlBulkCopy (.net BCL) - должен работать нормально –
Вы вообще не видели [SSIS] (http://en.wikipedia.org/wiki/SQL_Server_Integration_Services)? – Oded
@Oded: не вариант из-за распределенной среды – ReFocus