Быстрая вставка реляционных (нормализованных) таблиц данных в базу данных SQL Server 2008

2

Я пытаюсь найти лучший и быстрый способ вставить довольно массивное количество данных (~ 50K строк), чем Linq, который я использую сейчас. Данные, которые я пытаюсь записать на локальный db, находятся в списке данных, преобразованных в ORM, сериализованных и полученных из WCF. Я заинтересован в использовании SqlBulkCopy, но проблема в том, что таблицы нормализованы и фактически представляют собой последовательности или взаимосвязанные таблицы со отношениями "один ко многим".

Вот какой код, который иллюстрирует мою точку зрения:

foreach (var meeting in meetingsList)
    {
         int meetingId = dbAccess.InsertM(value1, value2...);
         foreach (var competition in meeting.COMPETITIONs)
         {
                int competitionId = dbAccess.InsertC(meetingid, value1, value2...);
                foreach(var competitor in competition.COMPETITORs)
                {
                       int competitorId = dbAccess.InsertCO(comeetitionId, value1,....)
                       // and so on
                }
         }
    }

где dbAccess.InsertMeeting выглядит примерно так:

// check if meeting exists
int  meetingId = GetMeeting(meeting, date);

if (meetingId == 0)
{
   // if meeting doesn't exist insert new
   var m = new MEETING
   {
       NAME = name,
       DATE = date
   }
   _db.InsertOnSubmit(m);
   _db.SubmitChanges();
}

Заранее благодарим за любые ответы. Боян

Теги:
performance
sql-server-2008
linq-to-sql
sqlbulkcopy

1 ответ

4
Лучший ответ

Я бы все же использовал SqlBulkCopy, чтобы быстро скопировать ваши данные из внешнего файла в промежуточную таблицу, которая имеет ту же (плоскую) структуру, что и файл (вам нужно будет создать эту таблицу досрочно)

После загрузки вы можете разделить данные на несколько таблиц, используя, например, хранимая процедура или что-то - должно быть довольно быстро, поскольку все на сервере уже.

  • 4
    +1 Я всегда сначала использую промежуточную таблицу .. всегда есть проблема со сторонними данными, и она требует очистки
  • 0
    это интересная идея ... Я попробую, спасибо
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню