какой самый быстрый способ вставить потоковые данные в таблицу, БД - MS SQL Server 2008

Мне нужно написать приложение на С++, которое получает огромный поток данных (много тысяч сообщений в секунду) и вставляет его в базу данных MS sql server2008 (в одну или несколько таблиц) как можно быстрее. Я новичок в Windows, и среди множества способов, описанных в msdn, я не могу судить о том, как лучше всего это сделать, например: 1. следует ли использовать ODBC (используя собственный драйвер sql) или OLE db? odbc медленный? 2. я должен попытаться сделать sqlprepare stmt вставки? я должен попытаться связать несколько вставок вместе? ИЛИ я должен попробовать хранимую процедуру? это будет быстрее? 3. кто-то упомянул, что нужно изучить, предоставляет ли Windows API потока табличных данных напрямую (но я не смог его найти, и, вероятно, сейчас он немного более продвинут для меня).

Я хотел бы попробовать что-то быстрое в работе, быстрое в разработке (и, надеюсь, простое). пожалуйста, помогите, любые идеи наиболее ценятся. огромное спасибо!


person Community    schedule 22.07.2009    source источник


Ответы (2)


Посмотрите на SqlBulkCopy — это позволяет быстро вставлять несколько строк данных. Вы можете буферизовать несколько тысяч строк и периодически вставлять их.

person cjk    schedule 22.07.2009
comment
спасибо! Однако я ищу что-то для использования через «обычный» С++ (т.е. без использования .net или управляемых расширений, если это возможно), в настоящее время ищу способ массового копирования без использования .net... - person ; 22.07.2009
comment
Вы можете выполнить массовое копирование с помощью исполняемого файла bcp из SQL Server. Будет ли это работать для вас? - person cjk; 22.07.2009
comment
спасибо за Ваш ответ! В настоящее время я изучаю bcp_sendrow/bcp_bind и т. д. (расширения сервера sql), чтобы проверить, подходит ли он. еще ищете :-) - person ; 22.07.2009

В аналогичном приложении я группировал входящие данные и вставлял их с помощью BULK INSERT через класс .Net 2 SqlBulkCopy. Он вставляет порядка 100 000 строк в секунду.

Это с Sql Server 2005; Я не знаю никаких улучшенных методов для такой работы в 2008 году.

Редактировать: поскольку вы не можете использовать .Net framework, альтернативой может быть использование bcp_sendrow для вставки данных или запись входящих данных в файл и использование команд BULK INSERT или bcp.exe для выполнения тяжелой работы.

person Matt Howells    schedule 22.07.2009
comment
спасибо!.. однако мне нужно сделать это в «обычном» С++, и похоже, что SqlBulkCopy доступен только через .NET (насколько я до сих пор гуглил), есть ли что-то подобное без использования .NET? Спасибо! - person ; 22.07.2009
comment
Вам не нужен .NET для выполнения массовых вставок. На самом деле я думаю, что Bulk Insert предшествует платформе .NET. Это было в SQL Server 2000 и остается сегодня. - person onupdatecascade; 23.07.2009