|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Есть большой проект на 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.11.2021, 13:37 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87, Переход на Firedac не поможет. Проблема в Firebird. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 13:39 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Сергей Фролов Наталья87, Переход на Firedac не поможет. Проблема в Firebird. Если заново делать на базе FireDAC - работает всё значительно быстрее. Проблема в том, что переписывать код 400 форм это несколько месяцев работы. Потому и хочется какого-то решения - как перейти с IBX на FireDAC, не переписывая приложение. Уходить с Firebird в планах нет, у каждой СУБД есть плюсы и минусы, Firebird не является какой-то особо плохой СУБД (минусы у Firebird есть - но например, у Firebird зато выдающаяся работа с транзакциями, это многоверсионник так что какая СУБД хуже какая лучше можно оставить за рамками данной темы). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 13:42 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Сергей ФроловПроблема в Firebird. Не совсем, но переход действительно не поможет. Аффтарше вообще ничего не поможет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 13:47 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87> Другое дело в случае с правильно настроенным FireDAC. Вы уже пробовали протестировать на реальном примере или это умозрительные рассуждения? > Есть ли какое-нибудь готовое решение для этого Вряд ли. У FireDAC был IIRC некий мигратор с BDE, но сомневаюсь, что есть нечто подобное с IBX и т.п. P.S. Сначала попробуйте различные решения, не требующие изменения кода - ZeBeDee, VPN и пр. Если не поможет - тогда думайте менее "активном" взаимодействии клиента с сервером, bried-case и пр. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 13:47 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамP.S. Сначала попробуйте различные решения, не требующие изменения кода - ZeBeDee, VPN и пр. Мёртвому припарка. Протокол в Firebird 2.5 был оптимизирован под способ, которым его использует IBX. В тройке добавили сжатие, что делает бесполезным ЗиБиДи. Если даже с этим оно работает медленно - нужно рихтовать архитектуру, а у аффтарши "400 тысяч строк". (Хотя мы-то помним, что большая часть из них это хаки для стандартных компонент чтобы заставить их работать так как разработчикам и в страшном сне не могло присниться.) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 13:53 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Наталья87> Другое дело в случае с правильно настроенным FireDAC. Вы уже пробовали протестировать на реальном примере или это умозрительные рассуждения? Именно на реальном примере. Всё работает действительно быстрее. Раза в два как минимум. Причём из коробки. А с несчастным IBX можно применять множественные запросы в теле одного запроса, кэширования и прочие ухищрения - но все равно на FireDAC в итоге всё работает быстрее и лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:01 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov (Хотя мы-то помним, что большая часть из них это хаки для стандартных компонент чтобы заставить их работать так как разработчикам и в страшном сне не могло присниться.) Нет - бОльшая часть кода - это формы, построенные на базе TIBDatabase, TIBTransaction, TIBQuery, TDataSource, TDBGrid ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:02 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Гаджимурадов РустамP.S. Сначала попробуйте различные решения, не требующие изменения кода - ZeBeDee, VPN и пр. Мёртвому припарка. Протокол в Firebird 2.5 был оптимизирован под способ, которым его использует IBX. В тройке добавили сжатие, что делает бесполезным ЗиБиДи. Если даже с этим оно работает медленно - нужно рихтовать архитектуру, а у аффтарши "400 тысяч строк". (Хотя мы-то помним, что большая часть из них это хаки для стандартных компонент чтобы заставить их работать так как разработчикам и в страшном сне не могло присниться.) Имеет смысл перейти с Firebird 2.5 на Firebird 3.0? Ну так это в планах. Но задачу, описанную в рамках данной темы - всё равно придётся решать. Чтобы с IBX перейти на FireDAC. Неужели разработчики FireDAC не предусмотрели каких нибудь оберток для перехода со старого кода? IBX по сути не такой уж сложный чтобы его как надо обернуть ... может, на GitHub что-нибудь для этого есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:06 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87> Именно на реальном примере. Всё работает Наталья87> действительно быстрее. Раза в два как минимум. Что ж, удачи в переезде. Сообщите о результатах, ради интереса. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:07 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87> бОльшая часть кода - это формы, построенные Наталья87> на базе TIBDatabase, TIBTransaction, TIBQuery Формы не строят "на базе DB-компонент". Коннект у вас один, надеюсь, или тоже у каждой формы свой? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:08 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Наталья87> Именно на реальном примере. Всё работает Наталья87> действительно быстрее. Раза в два как минимум. Что ж, удачи в переезде. Сообщите о результатах, ради интереса. Так переезд не получается. Нужны обертки-переходники классов для IBX чтобы они работали на базе FireDAC. Неужели только вариант самостоятельно писать? Понятно что если писать с нуля то надо использовать Firebird 3.0 и FireDAC, но уже используется Firebird 2.5 и IBX ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:10 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87> Неужели разработчики FireDAC не предусмотрели Наталья87> каких нибудь оберток для перехода со старого кода? Разработчик FireDAC сюда заглядывает, может прокомментирует... Но вообще да, недоработка, должна быть и обёртка для перехода, и обёртка для оптимизации, и обёртка для сделать хорошо. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:11 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Наталья87> бОльшая часть кода - это формы, построенные Наталья87> на базе TIBDatabase, TIBTransaction, TIBQuery Формы не строят "на базе DB-компонент". Коннект у вас один, надеюсь, или тоже у каждой формы свой? Коннект один - TIBDatabase. Как и положено, не в обычной форме, а в DataModule. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:11 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Наталья87> Другое дело в случае с правильно настроенным FireDAC. Сначала попробуйте различные решения, не требующие изменения кода - ZeBeDee, VPN и пр. Если не поможет - тогда думайте менее "активном" взаимодействии клиента с сервером, bried-case и пр. Все, что можно было сделать в этом направлении - уже сделано. IBX уже "хакнутый". Но все равно так быстро, как FireDAC, не работает ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:14 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87> Нужны обертки-переходники классов для Наталья87> IBX чтобы они работали на базе FireDAC. Как Вы себе это представляете? Чтобы Вы в коде вызывали свойства/методы классов IBX, а они - невидимо и самостоятельно - "заменялись" на методы/свойства FireDAC? Или как? Ну, мне так, для себя ... (с) КВН Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:14 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87> IBX уже "хакнутый". Но все равно так быстро, как FireDAC, не работает ... В топик призывается МП. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:15 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
ReplaceStr('TIB', 'TFD', [ReplaceAll]) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:15 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Как Вы себе это представляете? Чтобы Вы в коде вызывали свойства/методы классов IBX, а они - невидимо и самостоятельно - "заменялись" на методы/свойства FireDAC? Или как? Да - именно так. Написать модуль - наследники классов IBX, чтобы они использовали FireDAC. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:18 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal ReplaceStr('TIB', 'TFD', [ReplaceAll]) Я полагаю, может сработать. Но по сложности и подводным камням будет сопоставимо с переходом с D2007 на D XE8. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:20 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87Нужны обертки-переходники классов для IBX чтобы они работали на базе FireDAC. Не нужны. Просто кладёте TFDConnection рядом с TIBConnection, одной строчкой кода шарите им хэндл, а потом не торопясь постепенно заменяете компоненты на формах по одной. Это будет быстрее и надёжнее, чем любый ваши самописные обёртки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:20 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья87Нужны обертки-переходники классов для IBX чтобы они работали на базе FireDAC. Не нужны. Просто кладёте TFDConnection рядом с TIBConnection, одной строчкой кода шарите им хэндл, а потом не торопясь постепенно заменяете компоненты на формах по одной. Это будет быстрее и надёжнее, чем любый ваши самописные обёртки. Я полагаю, вручную на 2-3 формах заменить, понять, что именно менять нужно, а потом написать скрипт на AutoIt чтобы заменил на остальных формах по такому же принципу. Может, так и сделаю ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:22 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87 Я полагаю, вручную на 2-3 формах заменить Наталья87 Коннект один - TIBDatabase. Как и положено, не в обычной форме, а в DataModule. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:34 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87Я полагаю, вручную на 2-3 формах заменить, понять, что именно менять нужно, а потом написать скрипт на AutoIt чтобы заменил на остальных формах по такому же принципу. Нет. Не пытайтесь умничать и отвлекаться. Ручками. Поэтапно. Каждую форму индивидуально с тестированием после каждой. Иначе времени потратите больше на отлов глюков, которые полезут везде и сразу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:35 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья87Я полагаю, вручную на 2-3 формах заменить, понять, что именно менять нужно, а потом написать скрипт на AutoIt чтобы заменил на остальных формах по такому же принципу. Нет. Не пытайтесь умничать и отвлекаться. Ручками. Поэтапно. Каждую форму индивидуально с тестированием после каждой. Иначе времени потратите больше на отлов глюков, которые полезут везде и сразу. Страшно подумать. Это же жуть, столько ручной работы в век автоматизации. Хочется автоматизировать и написать обёртку ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:43 |
|
|
start [/forum/topic.php?fid=58&fpage=8&tid=2036862]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 414ms |
0 / 0 |