Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Базы данных под .NET > Быстрый способ загрузки данных в MS SQL |
Автор: amarenkov 27.7.2009, 11:04 |
Добрый день. Необходимо загрузить много данных из какого-либо источника (в данном случае это XML, но не принципиально) на сервер MS SQL Server 2008 из C#. Каким образом это можно сделать максимально быстро? При помощи SqlConnection, SqlCommand? Есть ли какие-то хитрости (пакетная засылка данных, буффер, еще что-то)? Заранее спасибо ![]() |
Автор: Gluttton 27.7.2009, 13:08 |
http://msdn.microsoft.com/ru-ru/library/ms175915.aspx. |
Автор: Выхухоль 27.7.2009, 13:08 |
Если это xml, то это вообще можно сделать при помощи MSSQL сервера, без других программных средств. |
Автор: amarenkov 27.7.2009, 13:46 |
Gluttton, насколько я понял, это работает для файлов разных форматов. Мне же нужен метод записи данных на сервер из приложения. Причем создавать файлы доступные с сервера я не могу. Вообщем, я имел в виду, как программно я могу максимально быстро это сделать. Выхухоль, нет, надо из приложения программными средствами ![]() |
Автор: Gluttton 27.7.2009, 13:52 |
А каких объемах данных (количество записей), с какой частотой и каким количеством пользователей идет речь? |
Автор: amarenkov 27.7.2009, 15:36 |
Объем данных: примерно по 600 000 тыс. записей в 5 таблицах. Частота: редко. Пользователей: такую операцию осуществляет один пользователь. Проблема в том, что сейчас я использовал Entity Framework. Потребление памяти росло с огромной скоростью, производительность с той же скоростью падало (возможно, я что-то не так делал). Вот я и задался вопросом, как это можно сделать оптимально? |
Автор: Gluttton 27.7.2009, 15:58 | ||
Непосредсвенно с Entity Framework работать не приходилось, но проводя аналогию может "подлечить" периодический COMMIT, в данном контексте это может быть закрытие и повторное октрытие соединения через каждые например 10 000 записей (а может и 1 000). Но это уже так сказать эксперименты ![]() ![]() Хотя с другой стороны, если бы это помогало, наверное об этом бы пИсали ![]() А индексы в БД есть? Может их нужно перед началом вставки блока данных удалять, а потом (после завершения операции вставки) по новой создавать? |
Автор: jonie 29.7.2009, 18:20 | ||||||
ну и два инсерта подряд тоже вполне себе работают за один "ExecuteNonQuery". ну и вообще про bulk insert почитать стоит все же. Добавлено через 2 минуты и 23 секунды
|
Автор: Любитель 29.7.2009, 18:42 |
Получим строковое формирование SQL-а. Что не есть хорошо (по крайней мере в данном случае). |
Автор: jonie 29.7.2009, 18:52 |
Любитель в любом случае формируется строка, никто ж не запрещает сделать класс и наружу будет все "красиво". |
Автор: Любитель 29.7.2009, 20:12 |
Эээ.. Речь о том, чтобы отсылать один и тот же SQL всегда (скорее даже просто вызов нужной хранимки). |