Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
вольдемар
2 / 2 / 1
Регистрация: 30.01.2012
Сообщений: 25
#1

Запись в Mssql BLOB: как обойтись без Filestream?

10.10.2016, 07:57. Просмотров 1218. Ответов 23

Доброго времени суток форумчане.
У меня обновление программы реализовано через скачивание из БД ms sql 2008 r2 новой версии программы в виде zip с дальнейшем разархивированием.
Есть своя программка записи программы в БД blob.
Раньше всё работало хорошо, но когда в состав обновления добавил разные файлы и суммарный объём стал 400-500 Mb загрузчик в БД стал переполнять память.
Проблема выяснилась в том что для записи в Blob поле архив загоняю в filestram (классический рецепт взят на просторах форума), т.е. как я понял при создании файлпотока файл создаётся в памяти и мдёт её переполнение (>1200 mb).
Как обойти открытие в файлпотоке для записи в БД.
По сути это вопрос записи больших файлов в blob БД.
Спасибо.
P.S. Сейчас спасает использование 64 разр версии с 4 гб оперативной памяти, но на долго ли это.
P.S. Считывание из БД сразу в файл работает без запинок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2016, 07:57
Ответы с готовыми решениями:

Как не сохраняя на диске открыть файл из Blob-поля (mssql)
Привет всем. Появилась необходимость разобраться с сохранением и чтением...

не как без вас не обойтись
1.Нужно выразить из формулы s=v*t-(at*t)/2 переменную. t 2.Как преобразовать...

Как обойтись без условных переходов?
И снова здравствуйте. Еще интересует чем можно заменить условные переходы...

Можно ли обойтись без явной конвертации в коде?
Доброго времени. Существуют ли настройки сервера и/или подключения которых...

Запись Blob в БД
Избитая тема, знаю, но не выходит. Дано: БД interbase, таблица с тремя...

23
вольдемар
2 / 2 / 1
Регистрация: 30.01.2012
Сообщений: 25
11.10.2016, 23:13  [ТС] #21
MyEternity, это называется
"Через Делфи нельзя делайте костыль". СПС. Ничего нового.
Закройте тему.
0
MyEternity
96 / 96 / 25
Регистрация: 25.04.2016
Сообщений: 525
11.10.2016, 23:16 #22
А уж если и так не запишется из-за нехватки выделенной серверу памяти, то вам впору винить MS за их "косячный SQL Server".

Добавлено через 1 минуту
Цитата Сообщение от вольдемар Посмотреть сообщение
"Через Делфи нельзя делайте костыль". СПС. Ничего нового.
Это называется - MSSQL сам "постранично" возьмет ваш файл, и блоками по сколько-то запишет его в BLOB. Т.е. сделает примерно:
Цитата Сообщение от MyEternity Посмотреть сообщение
Либо писать в BLOB по частям через тот же самый tFileStream;
Вот только вам, не придется это реализовывать, психуя на несовершенность Delphi
0
вольдемар
2 / 2 / 1
Регистрация: 30.01.2012
Сообщений: 25
11.10.2016, 23:27  [ТС] #23
Перечитайте всю тему! в X64 для загрузчика обновлений на сервер при использовании всей памяти ПК и сервера всё работает на ура. И если есть одна команда на скачивание Блоб с сервера (всех 400-500мб разом дальнейшей работавшая х32) но нет на запись Блоб в х32 значит надо разбираться.
Я не обвиняю всё подряд. У меня рабочий код и с ограничением рабочий апдейт но НА ВОПРОС в приличном обществе принято отвечать и отнюдь не вопросом.
Если нет то скажите нет! Я же не спрашиваю какие у вас проекты и не дурак ли вы что их вообще на Делфи делаете.
Тут четкий технический (кибер) форум. Если не можете помочь то как профессионал сначала скажите что это либо невозможно либо очень сложно.
Не парьте мозг. За это время я скорее всего давно бы разобрался и судя выложил бы решение. Даже если это процедура авто разбива файла и запихивание в единое блоб поле.
Тему считаю закрытой.
0
MyEternity
96 / 96 / 25
Регистрация: 25.04.2016
Сообщений: 525
12.10.2016, 00:21 #24
Пример дозаписи в BLOB.
Реализуйте на хранимке и кормите хранимку кусками tFileStream хоть по 1024 байта.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DECLARE @vt TABLE (id INT, pdata varbinary(MAX));
 
DECLARE @buffer varbinary(MAX);
IF NOT EXISTS (SELECT pdata FROM @vt WHERE id = 1) 
BEGIN
    INSERT INTO @vt SELECT 1, CONVERT(varbinary, '');
END
 
SELECT * FROM @vt
 
SET @buffer = (SELECT pdata FROM @vt WHERE id = 1)
SET @buffer = @buffer + CONVERT(varbinary, 'Петя');
UPDATE @vt SET pdata = @buffer WHERE id = 1
 
SELECT * FROM @vt
 
SET @buffer = (SELECT pdata FROM @vt WHERE id = 1)
SET @buffer = @buffer + CONVERT(varbinary, ' и Маша');
UPDATE @vt SET pdata = @buffer WHERE id = 1
 
SELECT * FROM @vt
 
SET @buffer = (SELECT pdata FROM @vt WHERE id = 1)
SET @buffer = @buffer + CONVERT(varbinary, ' = Это взырвная смесь!');
UPDATE @vt SET pdata = @buffer WHERE id = 1
 
SELECT * FROM @vt
SELECT CONVERT(VARCHAR(MAX), pdata) FROM @vt WHERE id = 1
И да, это не костыль
0
Миниатюры
Запись в Mssql BLOB: как обойтись без Filestream?  
12.10.2016, 00:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2016, 00:21

Запись файла в BLOB
народ, помогите составить код, в firebird работает все прелесть, хотелось бы...

Файлы из BLOB открыть (без save)
Как не сохраняя на диск открыть файл из BLOBа в соответствующем приложении,...

Запись в поле BLOB файла rtf из RichEdit
Приветствую. Как можно записать в ячейку таблицы BLOB данные из RichEdit в ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru