Binary data in C variable, Александр, 29-Ноя-04, 12:35 [смотреть все]Подскажите, пожалуйста, как хранить некоторые бинарные данные (картинки, музыкальные файлы и проч.) в некоторой (возможно самостоятельно созданной) переменной на языке Си? Задача - иметь возможность хранить эти самые бинарные данные в базе данных Berkeley DB (нужен тип данных, который в SQL обзывается BLOB).В интернете, книгах, на этом сайте - искал. Заранее благодарен. |
- Binary data in C variable, prot, 16:18 , 29-Ноя-04 (1)
>Задача - >иметь возможность хранить эти самые бинарные данные в базе данных >Berkeley >DB (нужен тип данных, который в SQL обзывается BLOB). > >В интернете, книгах, на этом сайте - искал. >Заранее благодарен. Я сейчас пишу на BCB 5.0 под Win и столкнулся с подобной проблемой. Я решил это следующим образом: Создаю указател char *VarName и счётчик unsigned int Len. В базе (MySQL) я использую MEDIUMBLOB (кажеться так :) у меня для хранения фото. Этот тип поддерживает до 16M (после корректировке my.cnf) VarName всё равно куда указывать. А Len (32 bit) может держать длину до 4G. Используем системный вызов memcpy(dest *, src *, len) и всё как в сказке :) Допускаю, что мой способ неидеален. Хотелось бы узнать об алтернативном варианте.
- Binary data in C variable, Александр, 20:05 , 29-Ноя-04 (2)
>Я сейчас пишу на BCB 5.0 под Win и столкнулся с подобной >проблемой. Я решил это следующим образом: >Создаю указател char *VarName и счётчик unsigned int Len. В базе (MySQL) >я использую MEDIUMBLOB (кажеться так :) у меня для хранения фото. >Этот тип поддерживает до 16M (после корректировке my.cnf) VarName всё равно >куда указывать. А Len (32 bit) может держать длину до 4G. >Используем системный вызов memcpy(dest *, src *, len) и всё как >в сказке :) >Допускаю, что мой способ неидеален. Хотелось бы узнать об алтернативном варианте. Спасибо за варинт, но остаётся проблема определения структуры базы данных: насколько я понимаю, Berkeley DB требует чёткого определения структуры, под которую он потом создаёт таблицу, и, как я понимаю, она должна быть вполне чётко определена... В любом случае - спасибо за совет!
- Binary data in C variable, dimus, 10:49 , 30-Ноя-04 (3)
Если речь идет о базе данных с фотографиями, фильмами и т.п объектами, которые не надо часто удалять, а в основном хранить, то, в принципе, можно сделать так: 1 - Созаем таблицу "Имена файлов - хранилищ" вида "Имя файла - хранилища","ИД_ФАЙЛА_ХРАНИЛИЩА". 2 - Создаем другую таблицу - про хранимые файлы "ИД_ФАЙЛА_ХРАНИЛИЩА","ИД_ХРАНИМОГО_ФАЙЛА","СМЕЩЕНИЕ","РАЗМЕР" В вашей базе храним имя и ИД сохраняемого файла. Когда нужно - селект из этих двух таблиц, чтобы определить, в каком файле-хранилище есть наш файл, его размер и смещение. Большие бинарные объекты сохраняются непрерывным куском в файл-хранилище, что очень хорошо скажется на занимаемом дисковом пространстве. А если файловая система поддерживает очень большие файлы, то можно вообще обойтись только одним файлом. Конечно данный подход не совсем подпадает под тему топика и не очень хорош, если требуется часто удалять или менять файлы, но у него есть большое достоинство - он работает и к тому же очень быстро.
- Binary data in C variable, Александр, 15:42 , 30-Ноя-04 (4)
Спасибо, но только база не SQL, а её использование (вместо файловой системы) в данном случае почти обязательно...
- Binary data in C variable, dimus, 13:48 , 01-Дек-04 (5)
Все-таки подумайте над таким вариантом, так как вовсе не обязательно юзать SQL, чтобы работать с подобной структурой базы. Пример: очень многие компьютерные игры пихают все в один файл, откуда потом и берут нужное.
- Binary data in C variable, Александр, 14:12 , 01-Дек-04 (6)
>Все-таки подумайте над таким вариантом, так как вовсе не обязательно юзать SQL, >чтобы работать с подобной структурой базы. Пример: очень многие компьютерные игры >пихают все в один файл, откуда потом и берут нужное. Хорошо, спасибо.
|