Частое сохранение базы данных с миллионами записей?

Я пытаюсь вставить тонну данных в базу данных SQL-сервера, и мой вопрос в том, как часто мне следует сохранять, когда туда будут вставлены миллионы записей. Эффективно ли сохранять его после, например, 10.000 вставок или после 1.000.000 вставок? Есть ли какие-то ценности? Я использую C# Entity Framework для заполнения сервера данными, поэтому я использую класс DBContext, который обрабатывает CRUD и сохраняет.

что именно вы подразумеваете под "спасти"? После того, как вы запустите команду INSERT, данные для этой строки (или строк) будут в базе данных, если вы не используете транзакции, и в этом случае он ждет, пока вы не зафиксируете транзакцию. Как именно вы вставляете данные? Или, может быть, вы говорите о резервном копировании? Также, как вы думаете, почему изменение этой точки «сохранения» может повлиять на эффективность? Каким образом? Что вы ожидаете получить? Боюсь, не совсем понятно, о чем вы спрашиваете.

ADyson 10.08.2018 14:32

Это очень широкий вопрос. Судя по вашему вопросу, это не похоже на то, что SQL Server является единственным звеном в цепочке обработки. SQL Server разработан, чтобы быть высокоэффективным, но он также должен знать, что вы хотите, чтобы он выполнял эффективно, поэтому дизайн базы данных является основным фактором (структура таблицы, индексация и т. д.). На самом деле мы не сможем ответить на этот вопрос, не зная архитектуры вашего приложения.

squillman 10.08.2018 14:33

Ах, может быть, вы говорите об использовании SaveChanges () во фреймворке сущностей? Это фактически совершает транзакцию в фоновом режиме. Я не думаю, что это сильно повлияет на «эффективность», хотя само по себе это очень широкий термин. Если вы выполняете такую ​​массовую загрузку, я предполагаю, что на данном этапе вы не беспокоитесь о параллельном доступе, или вы? Если вы хотите в целом ускорить процесс загрузки, просто не используйте Entity Framework вообще, используйте подходящий инструмент массовой загрузки.

ADyson 10.08.2018 14:48
ericlippert.com/2012/12/17/performance-rant
mjwills 10.08.2018 14:54

Не забудьте установить AutoDetectChangesEnabled = false; в DbContext. Смотрите здесь stackoverflow.com/questions/5943394/…

Gauravsa 10.08.2018 14:55

Спасибо, ребята, за ответы и предложения!

Julian Peil 10.08.2018 15:25
0
6
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

I am using C# Entity Framework to populate the server with the data

Ваши проблемы начинаются здесь. Это не подходит для этого. НЕПРАВИЛЬНЫЙ ИНСТРУМЕНТ. Мне нравится Entity Frameowrk, но это ORM, а не инструмент массовой загрузки.

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

Обработка 4-5 потоков параллельно на полной скорости.

Entity Framework займет несколько часов для миллиона строк, независимо от того, как вы это сделаете. Просто не тот инструмент.

Также посмотрите SSIS и Массовое копирование

TGnat 10.08.2018 14:49

Другие вопросы по теме