Russian Qt Forum
Ноябрь 24, 2024, 04:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
Работа с BLOB большого размера
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Работа с BLOB большого размера (Прочитано 4456 раз)
maybe78
Гость
Работа с BLOB большого размера
«
:
Сентябрь 17, 2009, 12:32 »
Использую QSqlTableModel. В базе, в полях BLOB, хранится большое количество файлов по 5мб. Каждый раз при выполнении SELECT запросов эти файлы начинают заполнять оперативную память.
Мне страшно представить, как все это будет тянуться по сетке.
Интересует
, возможно ли считывать первые несколько байт BLOB поля, для того чтобы просто определять его наличие в соответствующей ячейке, и при необходимости считывать его целиком?
Или остается просто архивировать поля при загрузке и выгрузке так, чтобы вместо 5 мегабайт они занимали по одному? Но база будет большой, и поэтому такой вариант решения не совсем подходит.
Выручайте, ребята!
база FireBird, если чо
«
Последнее редактирование: Сентябрь 17, 2009, 12:39 от maybe78
»
Записан
Alp
Гость
Re: Работа с BLOB большого размера
«
Ответ #1 :
Сентябрь 17, 2009, 13:55 »
Может стоит добавить колонку идентификаторы и вычитывать его? Например первые N байт файла пихать в отдельное поле.
Записан
CroCIV
Гость
Re: Работа с BLOB большого размера
«
Ответ #2 :
Сентябрь 17, 2009, 14:17 »
на самом деле. Если есть возможность добавить в таблицу еще одно поле, то можно реализовать так:
1. Добавить битовое поле blob_is_empty.
2. Контролировать моменты вставки, удаления значений в поле BLOB, устанавливая blob_is_empty в 0/1
3. Тянуть запросы из базы без поля BLOB, но с полем blob_is_empty
4. По запросу пользователя для конкретной записи, в соответствии с blob_is_empty вытягивать или не вытягивать из базы значение поля BLOB
Записан
CroCIV
Гость
Re: Работа с BLOB большого размера
«
Ответ #3 :
Сентябрь 17, 2009, 14:33 »
можно конечно и как ты хочешь делать, считывать первые несколько байт поля BLOB. Но это тебе надо на эту тему обратиться к стандарту SQL или к документации SQL - Firebird (лучше к последней), на предмет функции считывающей заданное число байт поля. В Transact-SQL можно написать так
SELECT SUBSTRING(blob_column, start, length) FROM ...
где start - смещение в байтах относительно начала
length - число запрашиваемых байт.
Можно ли так в Firebird обращаться, я не знаю, работать не доводилось
Записан
maybe78
Гость
Re: Работа с BLOB большого размера
«
Ответ #4 :
Сентябрь 17, 2009, 19:30 »
CroCIV, спасибо!
Пока обедал сам дошел до решения. Создал в базе столбцы TINYINT в которых хранятся 0 и 1-цы, в зависимости от наличия в соседних колонках записей. И Селект делаю не по всем колонкам, а по всем кроме блоб. К блобам обращаюсь только в случае необходимости.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...