Вставка огромного количества записей в базу данных - PullRequest
1 голос
/ 13 мая 2011

Мне нужно запустить несколько алгоритмов для большого количества данных и сохранить каждый результат в базе данных.

Количество запусков алгоритма составляет 80 000–90 000, каждый цикл занимает около 2 секунд (только алгоритм). Так что это очень много времени.

Моя база данных SQL Server 2008. Я хочу использовать структуру сущностей ado.net (хорошо ли для этой задачи это плохо?)
Прямо сейчас выходные данные (которые должны храниться в БД) являются простыми необработанными (не очень большими), плюс некоторые поддерживают столбцы, такие как дата и время.

Какая лучшая практика для этого?
Вставить строку за строкой, как каждый алгоритм завершает? сохранить результаты в памяти и после окончания работы вставить данные?

Ответы [ 3 ]

3 голосов
/ 13 мая 2011

Не могли бы вы попробовать BulkInsert после запуска вашего алгоритма сначала для всех записей?Это очень эффективно при получении данных в базу данных.

http://msdn.microsoft.com/en-us/library/ms188365.aspx

1 голос
/ 13 мая 2011

Вы можете использовать класс SqlBulkCopy и использовать DataTable в качестве исходных данных.Это действительно быстро по сравнению с несколькими INSERT.

0 голосов
/ 29 апреля 2013

Если вы не использовали sqlbulkcopy, вы можете сделать следующее:

  1. Сохранить данные в локальных переменных
  2. После того, как все данные собраны, начните транзакцию SQL и вставьте каждую строкув дБПосле выполнения всех запросов на вставку выполните коммит.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...