2008-11-14 2 views
4

У меня есть объект, который я использую для хранения метаданных документа в таблице. Основной текст документа может быть очень большим, иногда> 2 ГБ, поэтому я буду хранить его в поле nvarchar (max) в SQL 2008. Я буду использовать SQL 2008 позже, чтобы индексировать это поле. Я не буду использовать filestreams, потому что они очень ограничивают базу данных и предотвращают некоторые типы схем блокировки параллелизма.Streaming и Linq Blobs

Этот объект предоставляется разработчику через LinqToSQL. Я обеспокоен тем, что поле будет большим, и я видел .Net бомба с исключением OutOfMemory, если текст составляет> 1,5 ГБ.

Так что я задаюсь вопросом, могу ли я обработать этот blob как поток с Linq? Или мне нужно обойти Linq вообще, если я хочу использовать blob?

ответ

2

С учетом ответа на вопрос "Can a LINQ query retrieve BLOBs [...]" I подозреваемый вам не повезло. Тип System.Data.Linq.Binary не имеет механизма для потоковой передачи - в основном это просто неизменяемое представление массива байтов.

Может быть какое-то глубокое LINQ mojo, на которое вы могли бы ссылаться, но я подозреваю, что это действительно должно быть довольно глубоко.

Возможно, что Entity Framework справится с этим - я этого не исследовал.

+0

Спасибо за отзыв. Я думал, может быть, я мог бы добавить новое свойство для обработки поля blob и расширить частичный класс для потоковой передачи двоичных данных в базу данных отдельно от Linq. Тогда разработчик, использующий класс, не сможет сказать разницу. – Jiyosub 2008-11-14 08:48:49

+0

Я подозреваю, что это будет не так просто (я подозреваю, что проекции с использованием свойства не будут работать), но это звучит в основном выполнимо. Вам нужно написать в базу данных из этого приложения или просто прочитать? Чтение, скорее всего, будет * много * проще :) – 2008-11-14 08:50:44

1

Я закончил писать свой собственный метод вокруг linqtoSql, используя способ записи, доступный для объектов varchar (max) в SQL. Это позволяет разработчикам размещать вставки в БД для больших типов данных.