Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Есть большой проект на Delphi 2007 - больше 400 тысяч строк.

Весь проект построен главным образом на базе

TIBDatabase, TIBTransaction, TIBQuery, TDataSource, TDBGrid

(разумеется, есть еще много используемых компонентов - но это основное)



Проблема в IBX в том, что это устаревшее решение и медленно работает при подключении к базам данных через Интернет-соединение. Например, если ping между 2 компьютерами 20 миллисекунд - выполнением одного небольшого Select (даже возвращающего всего 1 запись) занимает около 80-100 миллисекунд (то есть в 4-5 раз дольше, чем обычный ping).

Другое дело в случае с правильно настроенным FireDAC. Время выполнения Select может быть 20-40 миллисекунд (то есть 1-2 обычных ping вместо 4-5). Соответственно, если всё приложение перевести с IBX на FireDAC - скорость его работы существенно возрастёт при подключении к базе данных через Интернет (где ping между компьютерами не 1-2 миллисекунды, как в локальной сети, а даже 20 мс считается хорошим).



Теперь остаётся вопрос в том - как перевести проект с IBX на FireDAC - чтобы программный код проект этого "почти не заметил"?

Как я понимаю, потребуется переопределить классы TIBDatabase, TIBTransaction, TIBQuery - чтобы они работали на базе FireDAC (используя классы TFDConnection TFDTransaction TFDQuery) и подключить переопределённые классы ко всем формам проекта - после подключения стандартных модулей IBX.

При обращении приложения - скажем, к TIBQuery.Open промежуточный класс должен образаться к TFDQuery и т. д. Еще в приложении для TIBQuery используется множество обработчиков событий AfterScroll, OnGetText и т. д. - они тоже должны перенаправляться на FireDAC. Чтобы не менять (или почти не менять) программный код приложения (там более 200 форм) - но чтобы при этом перевести его на FireDAC.



Есть ли какое-нибудь готовое решение для этого или идея бесперспективная? Занимался ли кто-нибудь подобным? Как лучше всего безболезненно перевести проект с IBX на FireDAC?
12 ноя 21, 13:37    [22395054]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Сергей Фролов
Member

Откуда:
Сообщений: 1608
Наталья87,

Переход на Firedac не поможет. Проблема в Firebird.
12 ноя 21, 13:39    [22395056]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Сергей Фролов
Наталья87,

Переход на Firedac не поможет. Проблема в Firebird.


Если заново делать на базе FireDAC - работает всё значительно быстрее. Проблема в том, что переписывать код 400 форм это несколько месяцев работы. Потому и хочется какого-то решения - как перейти с IBX на FireDAC, не переписывая приложение.

Уходить с Firebird в планах нет, у каждой СУБД есть плюсы и минусы, Firebird не является какой-то особо плохой СУБД (минусы у Firebird есть - но например, у Firebird зато выдающаяся работа с транзакциями, это многоверсионник так что какая СУБД хуже какая лучше можно оставить за рамками данной темы).

Сообщение было отредактировано: 12 ноя 21, 13:44
12 ноя 21, 13:42    [22395060]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54791

Сергей Фролов
Проблема в Firebird.

Не совсем, но переход действительно не поможет. Аффтарше вообще ничего не поможет.

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 13:47    [22395061]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 63461
Наталья87> Другое дело в случае с правильно настроенным FireDAC.

Вы уже пробовали протестировать на реальном
примере или это умозрительные рассуждения?

> Есть ли какое-нибудь готовое решение для этого

Вряд ли. У FireDAC был IIRC некий мигратор с BDE,
но сомневаюсь, что есть нечто подобное с IBX и т.п.

P.S. Сначала попробуйте различные решения, не
требующие изменения кода - ZeBeDee, VPN и пр.
Если не поможет - тогда думайте менее "активном"
взаимодействии клиента с сервером, bried-case и пр.

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 13:47    [22395062]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54791
Гаджимурадов Рустам
P.S. Сначала попробуйте различные решения, не требующие изменения кода -
ZeBeDee, VPN и пр.

Мёртвому припарка. Протокол в Firebird 2.5 был оптимизирован под способ, которым
его использует IBX. В тройке добавили сжатие, что делает бесполезным ЗиБиДи.
Если даже с этим оно работает медленно - нужно рихтовать архитектуру, а у
аффтарши "400 тысяч строк". (Хотя мы-то помним, что большая часть из них это
хаки для стандартных компонент чтобы заставить их работать так как разработчикам
и в страшном сне не могло присниться.)

Сообщение было отредактировано: 12 ноя 21, 13:54
12 ноя 21, 13:53    [22395066]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Гаджимурадов Рустам
Наталья87> Другое дело в случае с правильно настроенным FireDAC.
Вы уже пробовали протестировать на реальном
примере или это умозрительные рассуждения?


Именно на реальном примере. Всё работает действительно быстрее. Раза в два как минимум.
Причём из коробки. А с несчастным IBX можно применять множественные запросы в теле одного запроса, кэширования и прочие ухищрения - но все равно на FireDAC в итоге всё работает быстрее и лучше.
12 ноя 21, 14:01    [22395074]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Dimitry Sibiryakov
(Хотя мы-то помним, что большая часть из них это
хаки для стандартных компонент чтобы заставить их работать так как разработчикам
и в страшном сне не могло присниться.)


Нет - бОльшая часть кода - это формы, построенные на базе TIBDatabase, TIBTransaction, TIBQuery, TDataSource, TDBGrid
12 ноя 21, 14:02    [22395076]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Dimitry Sibiryakov
Гаджимурадов Рустам
P.S. Сначала попробуйте различные решения, не требующие изменения кода -
ZeBeDee, VPN и пр.

Мёртвому припарка. Протокол в Firebird 2.5 был оптимизирован под способ, которым
его использует IBX. В тройке добавили сжатие, что делает бесполезным ЗиБиДи.
Если даже с этим оно работает медленно - нужно рихтовать архитектуру, а у
аффтарши "400 тысяч строк". (Хотя мы-то помним, что большая часть из них это
хаки для стандартных компонент чтобы заставить их работать так как разработчикам
и в страшном сне не могло присниться.)


Имеет смысл перейти с Firebird 2.5 на Firebird 3.0? Ну так это в планах. Но задачу, описанную в рамках данной темы - всё равно придётся решать. Чтобы с IBX перейти на FireDAC.

Неужели разработчики FireDAC не предусмотрели каких нибудь оберток для перехода со старого кода? IBX по сути не такой уж сложный чтобы его как надо обернуть ... может, на GitHub что-нибудь для этого есть?
12 ноя 21, 14:06    [22395078]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 63461
Наталья87> Именно на реальном примере. Всё работает
Наталья87> действительно быстрее. Раза в два как минимум.

Что ж, удачи в переезде. Сообщите о результатах, ради интереса.

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 14:07    [22395082]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 63461
Наталья87> бОльшая часть кода - это формы, построенные
Наталья87> на базе TIBDatabase, TIBTransaction, TIBQuery

Формы не строят "на базе DB-компонент".
Коннект у вас один, надеюсь, или тоже у
каждой формы свой?

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 14:08    [22395084]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Гаджимурадов Рустам
Наталья87> Именно на реальном примере. Всё работает
Наталья87> действительно быстрее. Раза в два как минимум.

Что ж, удачи в переезде. Сообщите о результатах, ради интереса.


Так переезд не получается. Нужны обертки-переходники классов для IBX чтобы они работали на базе FireDAC. Неужели только вариант самостоятельно писать?

Понятно что если писать с нуля то надо использовать Firebird 3.0 и FireDAC, но уже используется Firebird 2.5 и IBX ...
12 ноя 21, 14:10    [22395085]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 63461
Наталья87> Неужели разработчики FireDAC не предусмотрели
Наталья87> каких нибудь оберток для перехода со старого кода?

Разработчик FireDAC сюда заглядывает, может
прокомментирует... Но вообще да, недоработка,
должна быть и обёртка для перехода, и обёртка
для оптимизации, и обёртка для сделать хорошо. :)

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 14:11    [22395087]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Гаджимурадов Рустам
Наталья87> бОльшая часть кода - это формы, построенные
Наталья87> на базе TIBDatabase, TIBTransaction, TIBQuery

Формы не строят "на базе DB-компонент".
Коннект у вас один, надеюсь, или тоже у
каждой формы свой?


Коннект один - TIBDatabase. Как и положено, не в обычной форме, а в DataModule.
12 ноя 21, 14:11    [22395088]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Гаджимурадов Рустам
Наталья87> Другое дело в случае с правильно настроенным FireDAC.
Сначала попробуйте различные решения, не
требующие изменения кода - ZeBeDee, VPN и пр.
Если не поможет - тогда думайте менее "активном"
взаимодействии клиента с сервером, bried-case и пр.


Все, что можно было сделать в этом направлении - уже сделано. IBX уже "хакнутый". Но все равно так быстро, как FireDAC, не работает ...
12 ноя 21, 14:14    [22395091]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 63461
Наталья87> Нужны обертки-переходники классов для
Наталья87> IBX чтобы они работали на базе FireDAC.

Как Вы себе это представляете? Чтобы Вы в коде
вызывали свойства/методы классов IBX, а они -
невидимо и самостоятельно - "заменялись" на
методы/свойства FireDAC? Или как?

Ну, мне так, для себя ... (с) КВН

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 14:14    [22395093]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 63461
Наталья87> IBX уже "хакнутый". Но все равно так быстро, как FireDAC, не работает ...

В топик призывается МП.

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 14:15    [22395096]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 985
ReplaceStr('TIB', 'TFD', [ReplaceAll])
12 ноя 21, 14:15    [22395097]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Гаджимурадов Рустам

Как Вы себе это представляете? Чтобы Вы в коде
вызывали свойства/методы классов IBX, а они -
невидимо и самостоятельно - "заменялись" на
методы/свойства FireDAC? Или как?


Да - именно так. Написать модуль - наследники классов IBX, чтобы они использовали FireDAC.
12 ноя 21, 14:18    [22395101]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Fr0sT-Brutal
ReplaceStr('TIB', 'TFD', [ReplaceAll])


Я полагаю, может сработать. Но по сложности и подводным камням будет сопоставимо с переходом с D2007 на D XE8.
12 ноя 21, 14:20    [22395102]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54791

Наталья87
Нужны обертки-переходники классов для IBX чтобы они работали на базе FireDAC.

Не нужны. Просто кладёте TFDConnection рядом с TIBConnection, одной строчкой
кода шарите им хэндл, а потом не торопясь постепенно заменяете компоненты на
формах по одной. Это будет быстрее и надёжнее, чем любый ваши самописные обёртки.

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 14:20    [22395103]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Dimitry Sibiryakov

Наталья87
Нужны обертки-переходники классов для IBX чтобы они работали на базе FireDAC.

Не нужны. Просто кладёте TFDConnection рядом с TIBConnection, одной строчкой
кода шарите им хэндл, а потом не торопясь постепенно заменяете компоненты на
формах по одной. Это будет быстрее и надёжнее, чем любый ваши самописные обёртки.


Я полагаю, вручную на 2-3 формах заменить, понять, что именно менять нужно, а потом написать скрипт на AutoIt чтобы заменил на остальных формах по такому же принципу. Может, так и сделаю ...
12 ноя 21, 14:22    [22395105]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13358
Наталья87
Я полагаю, вручную на 2-3 формах заменить
На каких 2-3 формах заменить, если
Наталья87
Коннект один - TIBDatabase. Как и положено, не в обычной форме, а в DataModule.
12 ноя 21, 14:34    [22395114]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54791

Наталья87
Я полагаю, вручную на 2-3 формах заменить, понять, что именно менять нужно, а
потом написать скрипт на AutoIt чтобы заменил на остальных формах по такому же
принципу.

Нет. Не пытайтесь умничать и отвлекаться. Ручками. Поэтапно. Каждую форму
индивидуально с тестированием после каждой. Иначе времени потратите больше на
отлов глюков, которые полезут везде и сразу.

Posted via ActualForum NNTP Server 1.5

12 ноя 21, 14:35    [22395116]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Dimitry Sibiryakov

Наталья87
Я полагаю, вручную на 2-3 формах заменить, понять, что именно менять нужно, а
потом написать скрипт на AutoIt чтобы заменил на остальных формах по такому же
принципу.

Нет. Не пытайтесь умничать и отвлекаться. Ручками. Поэтапно. Каждую форму
индивидуально с тестированием после каждой. Иначе времени потратите больше на
отлов глюков, которые полезут везде и сразу.


Страшно подумать. Это же жуть, столько ручной работы в век автоматизации. Хочется автоматизировать и написать обёртку ...
12 ноя 21, 14:43    [22395121]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Delphi Ответить