The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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,
              >чтобы работать с подобной структурой базы. Пример: очень многие компьютерные игры
              >пихают все в один файл, откуда потом и берут нужное.

              Хорошо, спасибо.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру