Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 |
Ну для начала это вообще плохая идея хранить файлы в базе. В ЛЮБОЙ. Сколько раз пробовал, но находил более лучшее решение. Может и не спроста вас ВСЕЛЕННАЯ предостерегает ? ![]() |
Автор: Alexey68 28.2.2017, 18:12 |
Сейчас остановился на том что пишу путь (в поле database) и храню в папке файлы, а какие ещё решения? |
Автор: borisbn 1.3.2017, 09:01 |
Объясните, пожалуйста, почему? |
Автор: _zorn_ 3.3.2017, 19:41 |
Да легко. Прочитать файл с диска (по указанному пути) намного дешевле по ресурсам чем выдёргивать из многогигобайтной базы например. В базе его еще надо найти... Да, искать будет база, но не удивляйтесь если вдруг все ляжет ) Короче проще изначально пути там хранить. Лучшего решения нет. И couchdb с аттачами не алё. По старинке - статикой ![]() |
Автор: 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? Или "простите, был не прав, вспылил" ![]() Схватка милого кота со злобным инопланетянином )) ![]() |