Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Запись массива в mysql


Автор: Alexey68 27.2.2017, 01:01
Приветствую Всех!
Столкнулся  с проблемой сохранения массива байт в поле (blob) базы mysql.
Необходимо файл (бинарный) записать (его) в поле.
Размер небольшой, использую MySql Api.
Может быть через потоки?:
TFileStream* stream=new TFileStream("c:\\1.bin",fmOpenReadWrite|fmShareExclusive);
stream->Seek(0,soFromBeginning);
.....
Прошу Вашей помощи.

Автор: _zorn_ 28.2.2017, 17:13
Ну для начала это вообще плохая идея хранить файлы в базе. 
В ЛЮБОЙ. 
Сколько раз пробовал, но находил более лучшее решение.
Может и не спроста вас ВСЕЛЕННАЯ предостерегает ?  smile 

Автор: Alexey68 28.2.2017, 18:12
Цитата(_zorn_ @  28.2.2017,  17:13 Найти цитируемый пост)
Сколько раз пробовал, но находил более лучшее решение.

Сейчас остановился на том что пишу путь (в поле database) и храню в папке файлы, а какие ещё решения?

Автор: borisbn 1.3.2017, 09:01
Цитата(_zorn_ @  28.2.2017,  17:13 Найти цитируемый пост)
Ну для начала это вообще плохая идея хранить файлы в базе. 

Объясните, пожалуйста, почему?

Автор: _zorn_ 3.3.2017, 19:41
Цитата(borisbn @  1.3.2017,  16:01 Найти цитируемый пост)
Объясните, пожалуйста, почему? 

Да легко. 
Прочитать файл с диска (по указанному пути) намного дешевле по ресурсам чем выдёргивать из многогигобайтной базы например. 
В базе его еще надо найти... 
Да, искать будет база, но не удивляйтесь если вдруг все ляжет )
Короче проще изначально пути там хранить.
Лучшего решения нет.
И couchdb с аттачами не алё. 
По старинке - статикой  smile 

Автор: borisbn 4.3.2017, 09:13
_zorn_

I. Чтобы прочитать данные из файла нужно:
1) найти в БД запись (например по дате/времени)
2) вычитать из БД в память имя файла
3) найти этот файл на диске
4) открыть файл
5) прочитать данные из файла в память

Чтобы прочитать данные из БД нужно:
1) см. п. 1 выше
2) прочитать данные из БД в память

Ничего не напрягает?

II. Если требуется забэкапить БД на одной машине и развернуть на другой, как Вы думаете, какой способ хранения удобнее?

III. Как быть, если БД находится на одном компьютере, а клиентская программа - на другом?
Можно, конечно, держать в БД сетевые пути к фалам (a la \\server\share\path\to\file), но как быть, если компьютер с сервером БД на Windows, а клиент на Linux или наоборот?
Есть, конечно, решения, но как Вы думаете, будут ли они быстрее, чем хранить данные в blob'ах?

IV. Приходите, пожалуйста, сюда в следующий раз с цифрами. Типа: Я протестировал 4 варианта: MySql и PostreSQL с файлами и с блобами.
Вот времена: ... ... ... ... Съел, borisbn? Или "простите, был не прав, вспылил"  smile 

Схватка милого кота со злобным инопланетянином ))
user posted image

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)