Здравствуйте, Holms, Вы писали:
H>плохо что он работает только с DataTable как с внешним источником данных
Разве? void WriteToServer(IDataReader reader)
Делаешь свою реализацию IDataReader и скармливаешь ему...
У IDataReader достаточно реализовать только часть методов и свойств: Read, FieldCount и GetValue (вроде ничего не забыл).
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Holms, Вы писали:
H>>Как добиться большей скорости.
IT>Самый быстрый способ для MSSQL BULK INSERT. Но нужна шара, чтобы положить на неё файл для сервера.
IT>Если бы в MSSQL был бы какой-нибудь API (хотя бы даже нативный) для BCP, то его можно было бы прикрутить к BLToolkit. Для Sybase на работе мы смастерили обёртку над нативными библиотеками и у нас получается заливать порядка 50k записей в секунду.
internal class pthist
{
public DateTime Timestamp { get; set; }
public string Ticker { get; set; }
public double Open { get; set; }
public double High { get; set; }
public double Low { get; set; }
public double Close { get; set; }
public double Volume { get; set; }
}
...
List<pthist> batch = new List<pthist>();
...
pthist h = new pthist
{
Ticker = fieldTicker.str(),
Timestamp = DecomrpessDateTime(fieldDateTime.str()),
Open = DecompressPrice(fieldOpen.str()),
High = DecompressPrice(fieldHigh.str()),
Low = DecompressPrice(fieldLow.str()),
Close = DecompressPrice(fieldClose.str()),
Volume = (int)DecompressVolume(fieldVolume.str()),
};
batch.Add(h);
...
if (rcCount > 1000000)
{
manager.InsertBatch(batch); // ОООООЧЧЕЕЕЕНЬ долго работает
}
и милионе записей, InsertBatch работает около 5 минут для SQL Server 2008.
сервер в той же сети что и мой комп.
Сеть совершенно не забита другими вещами.
Как такое может быть?
Как добиться большей скорости.
Индексов в таблице нету.
Здравствуйте, Holms, Вы писали:
H>Как добиться большей скорости.
Самый быстрый способ для MSSQL BULK INSERT. Но нужна шара, чтобы положить на неё файл для сервера.
Если бы в MSSQL был бы какой-нибудь API (хотя бы даже нативный) для BCP, то его можно было бы прикрутить к BLToolkit. Для Sybase на работе мы смастерили обёртку над нативными библиотеками и у нас получается заливать порядка 50k записей в секунду.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Если бы в MSSQL был бы какой-нибудь API (хотя бы даже нативный) для BCP, то его можно было бы прикрутить к BLToolkit. Для Sybase на работе мы смастерили обёртку над нативными библиотеками и у нас получается заливать порядка 50k записей в секунду.
да блин, облом. SQLite и тот быстрее записавает. Хотя читает медлено при 10 мил. записей. Хотел сравнить MS SQL. Не удалось
Здравствуйте, artelk, Вы писали:
A>А это не подходит?
эта вещь работает очень быстро.
Имея 500000 строк на одну итереацию получаем
1. заполнение DataTable — 7000 ms
2. WriteToServer — 3500ms
весьма не плохо.
плохо что он работает только с DataTable как с внешним источником данных
Здравствуйте, Holms, Вы писали:
H>эта вещь работает очень быстро.
Значит скорее всего используется какой-нибудь BCP-подобный API.
H>Имея 500000 строк на одну итереацию получаем H>1. заполнение DataTable — 7000 ms H>2. WriteToServer — 3500ms
Можно ещё попробовать заталкивать не сразу всё, а порциями.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Holms, Вы писали:
IT>>Можно ещё попробовать заталкивать не сразу всё, а порциями. H>так я порциями по 500000 строк и заталкиваю, у меня 9 мил записей.
Тогда поиграйся с размером порции.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, artelk, Вы писали:
A>Разве? A>void WriteToServer(IDataReader reader) A>Делаешь свою реализацию IDataReader и скармливаешь ему... A>У IDataReader достаточно реализовать только часть методов и свойств: Read, FieldCount и GetValue (вроде ничего не забыл).
мдя, пропустил
надо попробовать
Здравствуйте, IT, Вы писали:
IT>Надо посмотреть на реализацию. Аналогичный класс в Sybase провайдере тупо вставляет записи в цикле.
Как то пользовался — там честный bulk copy, очень быстрый. Я вставлял во временную табличку — оказалось, что это самый быстрый способ передать табличные данные в запрос.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495 on Windows 7 6.1.7601.65536>>