Потоковая передача прямо в базу данных - PullRequest
0 голосов
/ 31 октября 2008

Я использую c #, и у меня есть открытое соединение tcpip для получения данных. Можно ли сохранить поток в базе данных сервера MS SQL, как я его получаю, вместо того, чтобы получать все данные, а затем сохранять все это? Если бы поток мог быть отправлен в базу данных по мере его поступления, вам не пришлось бы хранить весь кусок данных в памяти. Это вообще возможно?

Ответы [ 4 ]

4 голосов
/ 31 октября 2008

Вы пишете в БД как BLOB или переводите данные в какой-либо форме, а затем выполняете вставки для каждой строки?

Ваш ответ в комментариях меня смутил. Запись потока в столбец BLOB сильно отличается от получения данных с последующим преобразованием их во вставки для отдельных строк.

В любом случае, потоковая передача в столбец BLOB возможна, сначала создав строку со столбцом BLOB, в которую необходимо вставить, и неоднократно вызывая оператор обновления:

update myTable set myColumn.Write(@data, @offset, @length) where someid = @someId

для кусков байтов из потока.

Прекрасный пример, расположенный здесь.

2 голосов
/ 31 октября 2008

SQL Server 2005 поддерживает конечные точки HTTP (без IIS), поэтому одним из решений будет создание веб-службы на SQL Server для непосредственного получения потоковых данных.

Эти ссылки объясняют настройку: http://codebetter.com/blogs/raymond.lewallen/archive/2005/06/23/65089.aspx http://msdn.microsoft.com/en-us/library/ms345123.aspx

1 голос
/ 02 ноября 2008

Почему бы просто не записать буфер в файл при получении пакетов, а затем вставить в базу данных после завершения передачи?

Если вы осуществляете потоковую передачу непосредственно в базу данных, соединение с базой данных будет оставаться открытым в течение длительного времени, особенно если сетевое подключение клиента не является лучшим.

1 голос
/ 31 октября 2008

См. здесь и здесь для примеров работы с потоками и базами данных. По сути, вам нужно передать повторные буферы (в идеале, кратные 8040 байтов в SQL Server). Обратите внимание, что примеры основаны на SQL 2000; с SQL 2005 varbinary (max) будет проще. Хотя очень похоже.

...