| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .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 всегда (скорее даже просто вызов нужной хранимки). |