Я пытаюсь вставить массу данных в базу данных SQL-сервера, и мой вопрос в том, как часто я должен сохранять, когда туда будут вставлены миллионы записей. Эффективно ли сохранять его после, например. 10 000 вставок или после 1 000 000 вставок? Есть ли какие-то ценности? Я использую C# Entity Framework для заполнения сервера данными, поэтому я использую класс DBContext, который обрабатывает CRUD и сохраняет.
Частое сохранение базы данных эффективно с миллионами записей?
comment
что ты имеешь в виду под словом "сохранить"? После запуска команды INSERT данные для этой строки (или строк) находятся в базе данных, если вы не используете транзакции, и в этом случае они ждут, пока вы не зафиксируете транзакцию. Как именно вы вставляете данные? Или вы говорите о создании резервной копии, возможно? Также почему вы думаете, что изменение этой точки сохранения может повлиять на эффективность? В каком смысле? Что вы ожидаете получить? Боюсь, не совсем понятно, о чем вы спрашиваете.
- person ADyson   schedule 10.08.2018
comment
Это очень широкий вопрос. Судя по вашему вопросу, SQL Server не является единственным звеном в цепочке обработки. SQL Server спроектирован так, чтобы быть высокоэффективным, но он также должен знать, что вы хотите, чтобы он делал эффективно, поэтому дизайн базы данных является основным фактором (структура таблиц, индексация и т. д.). На самом деле мы никак не можем ответить на этот вопрос, не зная архитектуры вашего приложения.
- person squillman   schedule 10.08.2018
comment
Ах, так вы, возможно, говорите об использовании SaveChanges() в структуре сущностей? Это эффективно фиксирует транзакцию в фоновом режиме. Я не думаю, что это сильно повлияет на эффективность, хотя само по себе это очень широкое понятие. Если вы выполняете такую массовую загрузку, я предполагаю, что на данный момент вы не беспокоитесь о параллельном доступе, или нет? Если вы хотите ускорить процесс загрузки в целом, просто не используйте Entity Framework вообще, используйте подходящий инструмент для массовой загрузки.
- person ADyson   schedule 10.08.2018
comment
ericlippert.com/2012/12/17/performance-rant
- person mjwills   schedule 10.08.2018
comment
Не забудьте установить AutoDetectChangesEnabled = false; в DbContext. См. здесь заголовок ="почему вставка объектов в ef 4 1 происходит так медленно по сравнению с objectcontext"> stackoverflow.com/questions/5943394/
- person Gauravsa   schedule 10.08.2018
comment
Спасибо, ребята, за ваши ответы и предложения!
- person Julian Peil   schedule 10.08.2018
Ответы (1)
Я использую C# Entity Framework для заполнения сервера данными
Ваши проблемы начинаются здесь. Он не подходит для этого. НЕПРАВИЛЬНЫЙ ИНСТРУМЕНТ. Мне нравится Entity Frameowrk, но это ORM, а не инструмент массовой загрузки.
Обычно я использую класс SqlBulkLoader для загрузки до 65 тыс. записей во временную таблицу (за секунды, но будьте осторожны, вы в значительной степени должны использовать временную таблицу), которую я копирую в конечную таблицу одной командой/транзакцией.
Обработка 4-5 потоков параллельно на полной скорости.
Entity Framework займет часы для миллиона строк, независимо от того, как вы его включите. Просто неправильный инструмент.
person
TomTom
schedule
10.08.2018