C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Переход с Paradox на сетевую БД., Выбор сетевой БД.
iAlexander
Отправлено: 10.02.2005, 12:21


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Привет всем.
Пожалуйста, дайте совет, как поступить в следующей ситуации:
Есть программа, написанная на BC5, +BDE, +база Paradox. Данная программа неплохо функционировала на локальной машине, но как только базу начали юзать с нескольких машин, она начала периодически рушиться. В связи с этим я давно начал подумывать о переходе на сетевую БД. Программа использует компоненты TTable и TQuery. Подготовительную работу по искоренению TTable и замену их на TQuery в основных модулях я начал давно. Сейчас эта часть выполнена на 40%, и я начал думать о выборе конкретной БД.
Пожалуйста, посоветуйте, что же мне выбрать в соответствии со следующими критериями:
1) Желательно произвести минимум рефакторинга по установлению соединения с базой.
2) BDE можно оставить, но если переход на ADO или другую схему при выбранной БД необходим, и при этом не потребуется существенных переделок, то можно и ликвидировать BDE.
3) Желательно, чтобы с БД могли работать стандартные TQuery компоненты (пускай и через BDE и дополнительный драйвер)
4) Ньюанс: скорее всего, все TTable'ы я не выгребу. В редкоиспользуемых частях программы они все-таки останутся.
5) Модификация базы нежелательна (есть autoinc поля, например), вместе с тем серверные возможности по обработке данных приветствуются (хранимые процедуры, etc.), хотя сейчас, конечно, и не используются.

Я выскажу несколько своих соображений:
InterBase видится как прямая альтернатива, но он не имеет AutoInc полей. Придется использовать генераторы, а модификация базы нежелательна. К тому же он не бесплатный (конечно, при нелицензионном BC это не сыграет роли, но все же приятнее осознавать, что хотя бы база лежит в свободном формате)
MySQL — неплохая альтернатива. Он бесплатный, простой, только я не знаю, насколько сильно мне придется менять структуру программы для обеспечения его поддержки. Просмотрев тему
MySQL , я не разрешил этот вопрос.
FireBird. Потребуется ли смена компонентов? Если это будет просто смена типов компонентов, с сохранением прежнего интерфейса доступа к данным, то это отлично. Замена не вызовет осложнений.

Пожалуйста, посоветуйте, что выбрать из того, что я перечислил, или что-нибудь другое, что может оказатся более удачным выбором.
AVC
Отправлено: 10.02.2005, 12:46


Ветеран

Группа: Модератор
Сообщений: 1583



Связка BDE — ODBC работает всегда. Так что если не нужна особая скорость и спец возможности, предоставляемые "прямыми" компонентами то выбор СУБД по этому признаку не критичен. (Одно из моих приложений с такой связкой находится в промышленной эксплуатациеи с 2000г практически без обслуживания)
Автоинкрементные поля отсутвуют во многих СУБД но их прекрасно заменяет пара триггер-генератор, что так же не требует переделки клиента.
Я правильно понял — вам нужна СУБД среднего класса?
Я бы выбирал по поддерживаемым типам блокировок, наличию средств разграничения доступа (зависит от приложения) и возможностям Select'а
FireBird — не поддерживает Select From Select, проблемы со служебными таблицами
MySQL — падает при выборке из 5-7 связных таблиц
MaxDB(SubDB) — имеет малое количество триггеров и сильно тормозит при выборках типа Select Field1, (Select Value) as Field2 From ...
Sybase ASA — хорош но далеко не бесплатен
PostGreeSQL — сейчас тестируем. Бесплатен и вроде удовлетворяет всем требованиям (ставить лучше на Linux)
MSSql — из серии больших серверов (очень не бесплатен)
Oracle — (см MSSql) + требет внимания при администрировании, зато очень масштабирем и из того что я пробовал самый быстрый, надежный и имеет много дополнительных возможностей (работать с ним просто приятно)

Выбирайте!
iAlexander
Отправлено: 10.02.2005, 13:43


Дежурный стрелочник

Группа: Участник
Сообщений: 70



AVC, большое спасибо.
Среднего класса — скорее интуитивно осознавая, что под этим подразумевается, я отвечу утвердительно. Особая скорость не нужна, наверное. Я думаю, MySQL после Paradox'a пользователям покажется ураганом, так? smile.gif
FireBird: Отсутствие Select from Select -это серьезный минус. Отметаем, к сожалению.

MySQL. А здесь интереснее. MySQL мне нравится. Только вот: падает при выборке из 5-7 связных таблиц — то есть при SELECT FROM t1,t2, ..., t5 ?
и даже при SELECT FROM t1 LEFT JOIN t2 ... JOIN t5?
и падает весь сервер ohmy.gif или просто не выполняется запрос?
Я поисследую свой код на наличие таких монстроидальных запросов.

MSSql и Oracle — нет, это к сожалению уже высоковато. Да и сервер будет работать далеко не на новом железе... Администрирование будет практически отсутствовать...
А насчет триггеров и генераторов я объясню: мне не хотелось бы ограничивать себя только базами, предоставляющими такие возможности. Ибо возможно в дальнейшем база будет портироваться дальше. Может, уже и без Билдера smile.gif

То есть мне больше интересны MySQL и PostGreeSQL. Но ставиться сервер будет точно на win9x (winNT)
Буду весьма благодарен, если Вы укажете руководства по прикручиванию MySQL или PostGreeSQL к BDE и использованию этой связки в Билдере. Можно на английском. Если навскидку не знаете, я поищу сам.

Интересно, намного ли PostGreeSQL быстрее MySQL? Я использовал MySQL в связке с Tomcat. Скорость не поражает воображение, хоть и вполне приемлема.

Отредактировано iAlexander — 10/02/2005, 14:47
AVC
Отправлено: 10.02.2005, 14:37


Ветеран

Группа: Модератор
Сообщений: 1583



Опытне люди советут PostGreSQL ставить только на Linux'е.
QUOTE

Буду весьма благодарен, если Вы укажете руководства по прикручиванию MySQL или PostGreeSQL к BDE и использованию этой связки в Билдере. Можно на английском. Если навскидку не знаете, я поищу сам.

Через ODBC. Брал на родных сайтах производителя. Работало с первого предъявления. Пробные запросы делал в SQLExplorer.
Сейчас закачаю в тестовый MySQL несколько рабочих таблиц и скажу что конкретно будет при связках. Запрос на несколько связок это не монстр, а норма.
Gedeon
Отправлено: 10.02.2005, 14:44


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (iAlexander @ 10/02/2005, 12:45)
MSSql и Oracle — нет, это к сожалению уже высоковато. Да и сервер будет работать далеко не на новом железе... Администрирование будет практически отсутствовать...

То есть мне больше интересны MySQL и PostGreeSQL. Но ставиться сервер будет точно на win9x (winNT)

Вот тут как раз Вам прямая дорога именно в линукс по всем пожеланиям.
iAlexander
Отправлено: 10.02.2005, 15:17


Дежурный стрелочник

Группа: Участник
Сообщений: 70



QUOTE
Сейчас закачаю в тестовый MySQL несколько рабочих таблиц и скажу что конкретно будет при связках. Запрос на несколько связок это не монстр, а норма.

Так вылетает сам сервер от чрезмерной нагрузки на объемы данных?
Я обычно стараюсь минимизировать объемы обрабатываемых данных всеми возможными способами. А Вы имели в виду, что MySQL ломается при связке любых минимальных 7 таблиц или все же при полновесном декартовом произведении 7 мощных таблиц от большой нагрузки?
С нетерпением жду результатов тестов. Пока пошел на http://www.mysql.com.

Gedeon
Да, это хорошо, но в моих конкретных условиях к сожалению нереализуемо.

Отредактировано iAlexander — 10/02/2005, 16:31
AVC
Отправлено: 10.02.2005, 15:59


Ветеран

Группа: Модератор
Сообщений: 1583



Простите, что невольно ввел вас в заблуждение. Я и сам заблуждался. Если есть индексы ни чего он не падает. Ведет себя вполне адекватно. И поддерживает выборки типа
Select t.*
,(Select одно_значение ...) as field1
From
(Select ...) t1

Не поддерживает выборку одного значения в параметр функции

Подсказывают, что он не любит нескольких одновременно открытых связей
(у меня в памяти отложилось как связей с таблицами — еще раз простите).
Это надо проверять.

PS. самая большая из таблиц еще качается
PPS. Мне еще ни разу не понадобилось декартово произведение.

Отредактировано AVC — 10/02/2005, 16:06
iAlexander
Отправлено: 10.02.2005, 16:12


Дежурный стрелочник

Группа: Участник
Сообщений: 70



AVCСпасибо. Я сейчас читаю что там http://dev.mysql.com/ про себя пишут.
А Вы не могли бы присоединить этот тестовый проект, чтобы я его посмотрел и попробовал запустить? Так старт побыстрее бы получился.
AVC
Отправлено: 10.02.2005, 16:31


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

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

Нет. Но не потому что мне жалко, а потому что его нет в природе biggrin.gif
Прошлой весной мне пришлость тестировать несколько серверов и от этой работы осталось 9 файлов dbf, которые имитируют данные для решения одной из задач работающей системы. Я их чем нибудь закачиваю на исследуемый сервер и пробую запросы.
Сейчас проверятся MySQL сервер и связка BDE-ODBC. Server доступен по лвс и стоит на Win2003. Работа ведется через DBExplorer.
Могу привести имеющиеся на данный момент результаты.

Все. Загрузка кончилась. Сейчас попытаюсь "поднять" основной рабочий запрос.

QUOTE
Так старт побыстрее бы получился

Если вы использовали TDatabase то вообще проблемы можно попытаться свести к минимуму если "попасть" в имена таблиц, полей и типы полей

Отредактировано AVC — 10/02/2005, 16:42
iAlexander
Отправлено: 10.02.2005, 16:59


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Нет, DataBase я не использовал.
Но, может быть, есть смысл его привнести?
avc*
Отправлено: 10.02.2005, 17:11


Не зарегистрирован







Конечно. Это же централизация. Сейчас поменяли бы в DataBase Alias и все.
Я еще и Session ставлю яный, но это может и лишнее.
iAlexander
Отправлено: 10.02.2005, 18:22


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Ну, в общем-то у меня все равно всем компонентам свойство DatabaseName назначается динамически. Так что мне нужно лишь поменять то значение, которое им присваивается cool.gif
Но, может быть, TDataBase я все равно встрою. Спасибо за наводки. Буду приколачивать MySQL.
AVC
Отправлено: 11.02.2005, 09:18


Ветеран

Группа: Модератор
Сообщений: 1583



Удачи!
В целях значительного уменьшения объемов переработок можно остакить пару BDE-ODBC. Ну а для нового проекта можно поискать "прямые" компоненты. (Мне тут подсказывают DAC for MySQL)

Вернуться в Работа с базами данных в C++Builder