2008-10-31 1 views
0

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

ответ

4

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

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

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

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

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

Perfect example located here.

+0

В большинстве случаев я бы записывал данные в базу данных точно так, как это было получено. В некоторых случаях я бы читал необработанные данные, создавая поток xml и сохраняя это. Я уверен, что, если вы просто ответили на первый сценарий, я мог бы что-то сделать для второго сценария. Благодарю. – Jeremy 2008-10-31 03:37:27

2

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

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

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^