powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перевод проекта с IBX на FireDAC
25 сообщений из 111, страница 3 из 5
Перевод проекта с IBX на FireDAC
    #40111551
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Наталья87
А если не быстрее - зачем тогда он нужен вообще этот FireDAC (если он не быстрее IBX)?
Для мульти-СУБД-разработки, зачем же еще. Он поддерживает не только Firebird.


Понятно. Значит, ради ускорения на него переходить не стоит.

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

В Firebird конкретно вижу минус один - в том, что Firebird-хостингов мало, куда можно базу залить, а с MySQL - полнО. А для Firebird нужно покупать VPS (пусть даже линуксовый VPS, но все равно дороже обычного хостинга c MySQL).
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111553
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
Наталья87,
Пока, до идеи перенести свой проект на Firebird 4.0, я не вижу никакого смысла менять IBX на FireDAC.


Понятно. Поменяю для начала IBQuery на IBX где это возможно. Это малой кровью можно сделать. FireDAC как выяснилось не для скорости нужен как я думала изначально и уж трат ить месяцы чтобы перейти на него наверное не стоит ...
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111567
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87

Понятно. Поменяю для начала IBQuery на IBX где это возможно ...

O tempora, o mores!!

P.S. И где только работодатели берут таких, талантливых?
Вот ваш покорный слуга, к примеру, уже два года как не может работу по профилю найти,
Смешно сказать, пришлось с мая на бейсик с акцессом перейти.
Увы нам.((
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111604
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Есть большой проект на 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?


Переход на другую библиотеку компонентов не поможет. Максимум позволит увеличить производительность в пару раз. На практике эту будет выглядеть так. Сейчас пользователь жмёт кнопку и ждёт 5 минут реакции от программы (программа, к примеру, выполняет построчную обработку записей из таблицы, состоящей из 10000 записей, для каждой записи выполняется отдельный запрос к БД). После перехода на другую библиотеку время сократится до 2.5 минут. Но это всё равно недопустимо долго! За это время оператор пять раз успеет компьютер отресетить.
Варианты решения проблемы:
1) работать в режиме RDP. С этом случае на терминалом сервере Windows может быть запущено множество экземпляров программы под учётными записями пользователей. Базу данных можно разместить на том же либо на соседнем сервере. Проблемы с подключением оборудования (и пробросом его на рабочие места операторов) так или иначе решаются.
2) вводить дополнительный сервер, общаться с ним, например с помощью rest-запросов (например, с передачей json-пакетов). В одном rest-запросе можно запросить сразу несколько таблиц. Использовать для наиболее критических участков программы.
3) переделывать наиболее критические участки (циклическая обработка большого количества записей таблицы) на хранимые процедуры либо EXETUTE BLOCK
4) выполнять длительный код в дополнительном потоке, при этом пользователю можно вешать модальное окно с сообщением "подождите пару секунд..." и какой-нибудь анимацией. Быстрее оно от этого работать не будет, но хотя бы не будут зависать окна программы.
5) кэшировать справочники в памяти программы, периодически читая последние изменения из БД.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111605
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmSer,

ты предлагаешь переработать архитектуру здания тому, кто просит совета в выборе клея для обоев?
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111610
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer

Переход на другую библиотеку компонентов не поможет. Максимум позволит увеличить производительность в пару раз. <...>

В пару раз? При переводе с IBX на FireDAC? Во так просто заменой библиотеки (сам то пробовал) ?
Show must go on. ))
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111611
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Vlad F#22395387]
Наталья87

P.S. И где только работодатели берут таких, талантливых?
Вот ваш покорный слуга, к примеру, уже два года как не может работу по профилю найти,
Смешно сказать, пришлось с мая на бейсик с акцессом перейти.
Увы нам.((


Думаю, разница в зарплате все объясняет.
Может, вы к нам на 40 тысяч в месяц работать пойдете программистом? Неплохая зарплата в целом но для IT как я понимаю это копейки ...
Хочется больше, но что то голова не варит совсем. Только на написание такого кода как есть хватает ...
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111616
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87,

Не, на 40 тысяч, - решительно не пойду. У меня уже здоровье не на столько крепкое.
И, снова, маленькие дети.

P.S. Вот, разве что, консультантом.))
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111654
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F> Вот ваш покорный слуга, к примеру, уже два
Vlad F> года как не может работу по профилю найти

Ты вроде как переезжал для этого, с прицелом на Магнит IIRC?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111655
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87> У меня такой код, что открывает транзакции,
Наталья87> которые долго висят - например, в ожидании
Наталья87> диалогов пользователя. Очень удобно.

Вам может и удобно, а в многопользовательской среде
это неправильно. Правильнее делать короткие транзакции
"когда нужно" - т.е. при закрытии диалогового окна, а не
перед его открытием. Изучайте инструменты, которые
пользуете, знания сами собой не нарисуются...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111660
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Гаджимурадов Рустам
Наталья87> Другое дело в случае с правильно настроенным FireDAC.
Вы уже пробовали протестировать на реальном
примере или это умозрительные рассуждения?


Именно на реальном примере. Всё работает действительно быстрее. Раза в два как минимум.
Причём из коробки. А с несчастным IBX можно применять множественные запросы в теле одного запроса, кэширования и прочие ухищрения - но все равно на FireDAC в итоге всё работает быстрее и лучше.
Не могли бы вы привести код этих двух примеров?
Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111689
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Хочется больше, но что то голова не варит совсем.

Вот поэтому-то к старости человек и приучается не делать всё разом, а разбивать
работу на маленькие части. Желательно изолированные друг от друга, чтобы ошибка
в одной части не обрушила всё. Переводите по одной форме за раз. И
научитесь-таки пользоваться СКВ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111697
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Так вот - а что вы будете делать, если FireDAC не будет поддерживать расширений Firebird 4.0 по типам данных?

Надо будет установить RAD Studio 11 Update 1, когда он выйдет :)
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111699
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Зато ibx/fib+ умеют сервисные вещи делать. Бэкапы-ресторы, валидацию т .д.
А FireDAC не умеет. Ну, раньше не умел. Сейчас, возможно, уже умеет.

Эксперт, RTFM !
https://docwiki.embarcadero.com/Libraries/Alexandria/en/FireDAC.Phys.IBBase
https://docwiki.embarcadero.com/Libraries/Alexandria/en/FireDAC.Phys.FB
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111707
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Arefiev,

Крутяк! :)
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111800
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам

Вам может и удобно, а в многопользовательской среде
это неправильно. Правильнее делать короткие транзакции
"когда нужно" - т.е. при закрытии диалогового окна, а не
перед его открытием. Изучайте инструменты, которые
пользуете, знания сами собой не нарисуются...


У меня больше 3-х пользователей одновременно к базе практически не бывает. Генераторы легко решают проблемы конфликтов одновременного доступа. Держать транзакцию открытой просто удобно - программный код становится проще. Благо Firebird это позволяет - причём позволяет гораздо в большей степени чем какая либо другая СУБД, раз уж сделан выбор в пользу этой многоверсионной СУБД не вижу смысла не пользоваться её преимуществами.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111801
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747
Не могли бы вы привести код этих двух примеров?
Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX


А нет уже этого кода. Эксперименты делались в 2017 году. За это время уже и комп поменялся, мусор и разные временные куски кода небыло смысла переносить.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111803
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmSer

Варианты решения проблемы:
1) работать в режиме RDP. С этом случае на терминалом сервере Windows может быть запущено множество экземпляров программы под учётными записями пользователей. Базу данных можно разместить на том же либо на соседнем сервере. Проблемы с подключением оборудования (и пробросом его на рабочие места операторов) так или иначе решаются.
2) вводить дополнительный сервер, общаться с ним, например с помощью rest-запросов (например, с передачей json-пакетов). В одном rest-запросе можно запросить сразу несколько таблиц. Использовать для наиболее критических участков программы.
3) переделывать наиболее критические участки (циклическая обработка большого количества записей таблицы) на хранимые процедуры либо EXETUTE BLOCK
5) кэшировать справочники в памяти программы, периодически читая последние изменения из БД.


Это уже было частично сделано. Но всё равно тормозит. И всё это разное кэширование и код программы очень сильно усложняет и багов добавляет. Вариант рабочий разве что с RDP.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111807
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Гаджимурадов Рустам

Вам может и удобно, а в многопользовательской среде
это неправильно. Правильнее делать короткие транзакции
"когда нужно" - т.е. при закрытии диалогового окна, а не
перед его открытием. Изучайте инструменты, которые
пользуете, знания сами собой не нарисуются...


У меня больше 3-х пользователей одновременно к базе практически не бывает. Генераторы легко решают проблемы конфликтов одновременного доступа. Держать транзакцию открытой просто удобно - программный код становится проще. Благо Firebird это позволяет - причём позволяет гораздо в большей степени чем какая либо другая СУБД, раз уж сделан выбор в пользу этой многоверсионной СУБД не вижу смысла не пользоваться её преимуществами.
Плюс версионника - отнюдь не в возможности держать долгие транзакции, а в отсутствии блокировок при SELECT (и то есть нюансы).
А если транзакции будут долго висеть - то главная проблема, которая возникнет - будут накапливаться именно эти самые версии, и в итоге база обязательно станет колом.
При чем это случится даже если у вас 1 пользователь.
Есть в FB лазейка для "открытых подолгу гридов" - read only read commited транзакции. Именно read only. Но даже так - это плохо и проблемы будут возможны - как минимум, это издевательство над сервером.
Но если у вас пишущие транзакции висят - то крах вообще неминуем.

Вом не зря дали совет почитать об инструменте, который используете.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111815
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
крах вообще неминуем.


Ну запугал, так запугал.))
Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111816
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Cobalt747
Не могли бы вы привести код этих двух примеров?
Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX

А нет уже этого кода. Эксперименты делались в 2017 году. За это время уже и комп поменялся, мусор и разные временные куски кода небыло смысла переносить.

Наталья, имхо, тогда была допущена существенная ошибка в экспериментах. К чему народ и пытается вас аккуратно подвести.
Не может FireDAC работать с FB быстрее IBX. Его преимущества в другом.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111841
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет.
Ну значит одно из двух:
1. Транзакции таки ридонли
2. Настроено что-то вроде еженощного бэкап-рестора базы.

В других случаях не вижу, как такая база может прожить больше нескольких дней. Если отключить sweep-интервал - месяцев.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111842
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

При отсутствии конкурирующих транзакций, запускаемых вслед за текущей активной, длительность ее активности не играет никакой деструктивной роли.))
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111851
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad F

Не может FireDAC работать с FB быстрее IBX. Его преимущества в другом.


Я уже все поняла. Не буду переходить с IBX на FireDAC, оно того не стоит. Тем более по методу от Dimitry Sibiryakov. Лучше не тратить на это время, а сам проект развивать, там непаханое поле.
...
Рейтинг: 0 / 0
Перевод проекта с IBX на FireDAC
    #40111854
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Vlad F
Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет.
Ну значит одно из двух:
1. Транзакции таки ридонли
2. Настроено что-то вроде еженощного бэкап-рестора базы.

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


Нормально всё живёт годами. Вы наверное про какие то высоконагруженные системы. С моими базами одновременно работает 2-3 пользователя, ну иногда максимум 10, да и то разве что в порядке исключения. Если база замусоривается, файл растёт в размерах и производительность падает - это легко решается обычным Backup&Restore. В общем, Firebird - простая и удобная СУБД, при разработке продуктов для малого бизнеса просто идеальна, за что её думаю и ценят. При этом она вполне на уровне "взрослых" СУБД хоть и имеет какие-то недостатки, но в случае малого бизнеса (а не высоконагруженных систем) они несущественны. За всё время работы из всех недостатков только два обнаружила - снижение скорости работы со временем, по этой причине необходимость периодически делать backup&restore; невосстановимые бэкапы, что не дает встроить в продукт загрузку данных из бэкапов для юзеров; ну и еще базы периодически повреждаются при отключении света - но так чтобы часто это не недостаток Firebird думаю у остальных СУБД с этим не лучше а может еще и хуже тк многоверсионник по типу Firebird убить отключениями света по идее сложнее.
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перевод проекта с IBX на FireDAC
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]