Russian Qt Forum

Qt => Базы данных => Тема начата: BaryVetaL от Сентябрь 24, 2008, 09:04



Название: Выбор СУБД
Отправлено: BaryVetaL от Сентябрь 24, 2008, 09:04
Привет всем.
Вот столкнулся со следующей проблемой.
Хочу для своей программы на Qt для работы выбрать однопользовательскую СУБД.
Что то типа EasyTable или Accuracer Database System для Qt.
Но имеются некоторые требования:

1) Кроссплатформенность
2) Защита данных БД
3) Чтобы все работало без установки дополнительных драйверов
4) SQL 92

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

Думал об FireBird embeded но честно говоря не знаю...

Посоветуйте, что можно использовать в моем случае.
Спасибо.


Название: Re: Выбор СУБД
Отправлено: Пантер от Сентябрь 24, 2008, 09:21
SQLite, BerklyDB, что-нибудь через ODBC. FireBird хорошее решение, тем более можно будет потом на сервер перейти без проблем.


Название: Re: Выбор СУБД
Отправлено: Admin от Сентябрь 24, 2008, 10:15
есть еще mysql для приложений - встроенное

и не понятно про пункт 2 - что это такое?


Название: Re: Выбор СУБД
Отправлено: Barmaglodd от Сентябрь 24, 2008, 10:26
BerklyDB же по 4-ому пункту не подходит.


Название: Re: Выбор СУБД
Отправлено: BaryVetaL от Сентябрь 24, 2008, 15:16
Цитировать
и не понятно про пункт 2 - что это такое?

Да тут все просто: Например, БД sqlite, насколько я понимаю, можно открыть без проблем и содрать от туда данные, хочется, чтобы не было возможности без логина и пароля открыть БД.

Может просто выразился не так, но суть такая.


Название: Re: Выбор СУБД
Отправлено: Sergey B. от Сентябрь 24, 2008, 15:28
А как насчёт шифровать содержимое?
QCA вроде как доступен.


Название: Re: Выбор СУБД
Отправлено: BaryVetaL от Сентябрь 24, 2008, 15:49
Шифровать содержимое это не то...
Хочется чтобы СУБД все делала сама :)


Название: Re: Выбор СУБД
Отправлено: ритт от Сентябрь 24, 2008, 15:58
есть "родная" модифицированная sqlite, которая шифрует данные "на лету" без катастрофического падения производительности. как заявляет автор (кстати, он же автор и оригинальной sqlite), падения производительности на глаз вы не заметите /* по моему скромному мнению производительности sqlite уже и так некуда падать */
вся внутренняя работа по коду/декоду данных прозрачна и даже не потребуется модифицировать прослойку QSql...но эта модификация платная. есть бинарная демка.

если интересует, поищу ссылки - где-то точно были
либо на sqlite.org где-то есть упоминание со ссылочкой на почитайки


Название: Re: Выбор СУБД
Отправлено: BaryVetaL от Сентябрь 24, 2008, 16:05
Нет это не пойдет


Название: Re: Выбор СУБД
Отправлено: Пантер от Сентябрь 24, 2008, 17:40
ИМХО, практически любую БД можно прочитать в текстовом редакторе, если знать структуру. Если нужна именно секретность, то и храни зашифрованные данные.


Название: Re: Выбор СУБД
Отправлено: ритт от Сентябрь 24, 2008, 18:00
а куда уж большая секурность, чем криптованные односторонним ключём данные? :)
у меня знакомый даже сам писал для какого-то проекта шифрование склайтовских баз...не знал, бедняга, что такая штука уже есть и даже не бешенных денег стоит :)

кстати, а постгре/птиц поддерживают шифрование данных на лету? хоть нативно, хоть через расширения - мне пока не важно )


Название: Re: Выбор СУБД
Отправлено: Tonal от Сентябрь 26, 2008, 08:05
У Firebird в планах вроде есть, и есть вариант с Yaffil - форк  fb1.5 для винды.


Название: Re: Выбор СУБД
Отправлено: ритт от Сентябрь 26, 2008, 13:19
собственно, меня интересует в первую очередб птиц, т.к. именно его планирую использовать в качестве встроенной бд. подождём реализации планов фб :) а то откатываться до 1.5 как-то мрачновато...


Название: Re: Выбор СУБД
Отправлено: Tonal от Сентябрь 26, 2008, 18:25
Там если по честному всё делать изрядно повозится придётся - в Yaffil-е шифрование было реализовано только для варианта влинкованного движка. Иначе очень много мест получается, за которые можно для взлома зацепиться...


Название: Re: Выбор СУБД
Отправлено: BaryVetaL от Сентябрь 27, 2008, 10:02
Так что получается на сегодняшний день нет ни одной бесплатной СУБД с такими возможностями? Интересно... Я почему то думал, что FireBird это позволяет (видимо под влиянием старых версий).

Как тогда быть? Честно говоря не хочется, что бы кто-то копался потом в моей БД...

Кстати тут про MySQL писали, а эта СУБД поддерживает шифрование?


Название: Re: Выбор СУБД
Отправлено: Пантер от Сентябрь 27, 2008, 11:28
Шифруй данные сам.


Название: Re: Выбор СУБД
Отправлено: BaryVetaL от Сентябрь 27, 2008, 12:00
Шифруй данные сам.

Ну тогда будут проблемы такого плана:
1) Данные невозможно будет обрабатывать вручную (использовать какой нить Editor)
2) Будет существенное замедление работы с БД (поточное шифрование не так сильно влияет на скорость обработки данных)
3) Потенциальный взломщик, все равно может манипулировать данными (ну например при использовании БД sqlite), сможет удалять строки. А использование хешей для контроля целостности изменений это уж черезчур геморно.
4) Как быть с шифрованием разнотиповых данных (в FireBird например типа NUMERIC)? Запихнуть туда бинарные данные не получиться. А если изменить тип на BLOB, тогда будет тяжело работь с этим полем в запросах, да и не рационально.

Это далеко не полный перечень проблем с которыми прйдется столкнуться...



Название: Re: Выбор СУБД
Отправлено: Tonal от Сентябрь 30, 2008, 20:02
Короче, пока только ручками.
Хачить SQLite видимо наиболее просто, т.к. самая простая. :)


Название: Re: Выбор СУБД
Отправлено: ритт от Сентябрь 30, 2008, 20:18
а зачем "хачить"?
я ж писал - под склайт есть альтернативный драйвер. бинарная сборка полностью функциональна. не хотим покупать? - юзаем бесплатно, но поставляем бинарь отдельно от своего проекта...


Название: Re: Выбор СУБД
Отправлено: Tonal от Сентябрь 30, 2008, 20:42
Ясно. Проглядел. :)


Название: Re: Выбор СУБД
Отправлено: ритт от Сентябрь 30, 2008, 21:19
на всякий случай прикладываю сам бинарник (т.к. не помню урла, с которого тянул...а искать лениво :) )
попробуй: если соответствует требованиям, то сам уже ищи версию новее...


Название: Re: Выбор СУБД
Отправлено: Примерный ученик от Октябрь 01, 2008, 21:47
А в сторону PostgreSQL не смотрел? Там есть все что надо... И не очень заморочено ???


Название: Re: Выбор СУБД
Отправлено: BaryVetaL от Октябрь 02, 2008, 10:11
А как насчет драйверов? Хочется механизм, который заставит работать приложение с БД без участия пользователя. Т.е. чтобы пользователь установил программу и не заморачивался с установкой и настройой дров для программы...

Postgress насколько я понимаю требуется первоначальная настройка.


Название: Re: Выбор СУБД
Отправлено: Примерный ученик от Октябрь 03, 2008, 07:39
Настройка СУБД очень простая.
В Windows - обычный инсталятор, к которому легко сделать инструкцию.
Для Линуксов есть RPM-ы, также - легко и просто.
А создать базу можно из приложения...
Про компиляцию драйверов - информации море...


Название: Re: Выбор СУБД
Отправлено: Примерный ученик от Октябрь 03, 2008, 07:41
И что немаловажно, СУБД - очень мощная, активно развивается  и совершенно бесплатная... ;D


Название: Re: Выбор СУБД
Отправлено: Admin от Октябрь 03, 2008, 09:14
к сожалению для postgress нет встраивоемой либы, как сделано для mysql - нужно отдельный сервис запускать

PS: тема мне тоже инетересна - так как скоро хочется написать программку с базой и данные в ней особо светить не охота


Название: Re: Выбор СУБД
Отправлено: Примерный ученик от Октябрь 03, 2008, 09:33
К сожалению это так.
Однако инициализация этого сервиса занимает несколько минут, а в дальнейшем -
он автоматически запускается вместе с ОС. Так что это не очень существенный недостаток.
При том, что получаешь доступ к полноценной и мощной СУБД и не имеешь никаких проблем с
лицензированием ;D


Название: Re: Выбор СУБД
Отправлено: Tonal от Октябрь 03, 2008, 09:59
2 Примерный ученик То же самое можно и про Firebird сказать, только у него ещё и встраиваемый вариант есть. :)


Название: Re: Выбор СУБД
Отправлено: ритт от Октябрь 03, 2008, 10:04
гг...слышу приближающийся флэйм на религиозные темы :)


Название: Re: Выбор СУБД
Отправлено: Примерный ученик от Октябрь 03, 2008, 11:11
У меня в ТЗ забит PostgreSQL. Что пользую - о том и говорю ::)
Более менее поработав и кое что поняв. Пока доволен ;D


Название: Re: Выбор СУБД
Отправлено: ритт от Октябрь 24, 2008, 15:04
нашёл где говорилось про расширенный SQLite: http://www.hwaci.com/sw/sqlite/prosupport.html
возможно что-то изменилось, а может быть я просто запамятовал - при включённом шифровании предсказывается падение производительности примерно вдвое...
данное расширение доступно только за единоразовую выплату 2килобаксов, но имеется небольшая вероятность договориться о скидке с автором напрямую...


Название: Re: Выбор СУБД
Отправлено: xintrea от Октябрь 25, 2008, 22:23
Вставлю свои пять копеек.

В любом случае, какую бы базу ты не выбрал, рекомендую внутри своей программы сделать промежуточный класс/набор функций, который будет вначале как минимум тупо перетранслировать SQL запросы в саму SQL систему и обратно. И все SQL запросы в программе писать не напрямую, используя API выбраной SQL системы, а через вот такой промежуточный класс. Ну, и стараться не пользоваться уникальными для конкретной SQL системы запросами, только стандартными.

Таким образом, ты всегда сможешь лехко перейти с одной БД на другую, подправив только промежуточные функции. Плюс, у тебя будет точка управления SQL запросами. А замедления работы из-за такой реализации, практически не будет. Можешь кстати посмотреть, как Котеров сделал свой DbSimple (dklab.ru (http://dklab.ru)), на сях делать что-то подобное не обязательно, просто посмотри прототипы его абстрагирующих функций. Именно такой вид будет удобно использовать для своих промежуточных функций.


Название: Re: Выбор СУБД
Отправлено: Rcus от Октябрь 25, 2008, 23:09
Смысл создавать еще один слой совместимости если об этом уже позаботились создатели QT включив в состав модуль QtSql.

А вот с возможностью перехода не все так просто. СУБД выбирают по разным критериям, например легкая интеграция в домен MSSQL, скорость обработки данных Oracle, возможности по работе с нестандартными типами PostgreSQL. Но процедурные расширения языка у всех субд разные (есть стандарт SQL/PSM, но появился он относительно поздно), так что легкого перехода в любом случае не будет.


Название: Re: Выбор СУБД
Отправлено: xintrea от Октябрь 26, 2008, 12:34
Смысл создавать еще один слой совместимости если об этом уже позаботились создатели QT включив в состав модуль QtSql.

Ну модуль этот поддерживает не все базы данных, о которых говорилось здесь.

IBM DB2
Borland InterBase Driver
MySQL Driver
Oracle Call Interface Driver
ODBC Driver (includes Microsoft SQL Server)
PostgreSQL Driver
SQLite version 3 or above
SQLite version 2
Sybase Adaptive Server

Например, FireBird в списке нету, хотя, наверно через ODBC его можно использовать. Под виндой. А под линухом что делать, если разработчик хочет кросплатформенности?

Но я вообще-то говорю о другом. QtSql - это по большей части модуль абстракции SQL запросов. А я говорю про точку управления, через которую проходят все действия с SQL запросами. Можно конечно унаследоваться от QSqlDatabase, QSqlQuery и т.д., пожалуйста, но точку управления нужно иметь свою, которую легко менять и адаптировать к изменяющимся условиям.


Название: Re: Выбор СУБД
Отправлено: ритт от Октябрь 26, 2008, 13:01
фб - это то же ибэйз. и в доках даже имеются указания как собирать с птичкой.
наследоваться от QSqlDatabase, QSqlQuery бесполезно, т.к. это всего лишь обёртки, в частности не имеющие даже ни одного виртуального метода.
у меня есть класс - собрат QSqlTableModelPrivate, но предназначенный не для выборки/хранения, а для подготовки/выполнения бд-независимых запросов к таблице...можно его считать "точкой управления"? или "точка" должна ещё знать всякие ширпотребные СП/СФ, особенности GROUP BY и т.п.?


Название: Re: Выбор СУБД
Отправлено: xintrea от Октябрь 26, 2008, 14:13
Я приведу пример из практики, правда немного из другой области, но суть остается та же. Делаем мы системы для интерактивных киосков. И вот с производства приходит заявка - сделать возможность настройки киосковых программ так, чтоб все изображение было кверхногами. Там какая-то залипуха с корпусами и новыми мониторами, в обычном положении они не влазят, а в перевернутом - влезают.

У одного товарища программа была вся сделана через один рендер. Он быстро переделал переворот экрана.

У меня было несколько рендеров - рендер трехмерки, рендер шрифтов, рендер спрайтов, и в каждом рендере свои установки для OpenGL матриц и причие специфичные настройки GL контекста. Но я тоже быстро переделал переворот экрана и задумался, а не доделать ли все до конца, и сделать один рендер?

А у другого товарища весь вывод графики размыт по коду и сделан прямыми OpenGL командами, работа шла с абсолютными координатами. Он долбался долго, то один элемент у него не там появится, то другой, то что-то повернуто не так, то исчезает с экрана. Уже хотели ему советовать оставить как есть, только рендерить в память, потом захватывать картинку в текстуру и выдавать перевернутой. Но оказалось что такое решение заметно тормозит. В конце концов перец вроде сделал что нужно, но код превратился вааще в кашу.

Вот от такого развития событий (только с SQL-командами) я и предостерегаю автора топика. Без точек управления проект расползётся так, что модифицировать и развивать его будет большой проблемой.


Название: Re: Выбор СУБД
Отправлено: ритт от Октябрь 26, 2008, 15:13
из данного поста делаю вывод, что мой вспомогательный класс вполне можно назвать "точкой управления" :)
я же позиционирую его как "хэлпер" - обёртку над QSqlDriver, позволяющую заменить десятки строк кода на пару строк и получить на выходе абсолютно тот же результат...

пример выше неадекватен в случае скл, т.к. в кутэ имеется QSqlDriver, который содержит ряд методов для построения бд-независимых запросов и манипулации данными - строить все запросы через эти методы - и не придётся ползать по коду и, к примеру, квотить имена таблиц/полей по правилам какой-то другой бд...
правда, есть серьёзный минус в QSqlDriver - напроч отсутствует возможность работы с СП/ЮДФ и т.п. посредством стандартных методов :( - в таких случаях всё-равно придётся писать "голые" запросы и править их потом в случае необходимости...


Название: Re: Выбор СУБД
Отправлено: Admin от Октябрь 30, 2008, 12:07
нашел тут в тему про 2000 баксовый драйвер sqlite

Цитировать
_**://www.nulled.ws/showthread.php?t=37558
Сабж: есть приложение которое работает с файлом базы данных. 95% что база данных SQLLite. База зашифрованна (в зашифрованном архиве) и вскрыть его (архив) не получается. В самом архиве по коственным данным база не шифруется. Приложение работает с несколькими такими базами и при работе с каждой из них оно загружает всю базу в оперативку. Это костаенные данные но вероятность их около 95% тоже. Нужно как то сделать дамп из оперативки всей области памяти занятой процессом этого приложения.
Знает ли кто-нибудь софт под это дело? Единственное что я знаю это что можно делать полный аварийный дамп памяти и в принцепе пердставляю как это сделать. Но если таким образом делать дамп процесса со всеми базами которые мне нужны то к финалу есть вероятность что комп сдохнет от моих аварийных завершений его работы