|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
YuRock Наталья87 А если не быстрее - зачем тогда он нужен вообще этот FireDAC (если он не быстрее IBX)? Понятно. Значит, ради ускорения на него переходить не стоит. А от Firebird мне трудно отказаться будет. У меня такой код, что открывает транзакции, которые долго висят - например, в ожидании диалогов пользователя. Очень удобно. Firebird многоверсионник легко такое переваривает. А какой-нибудь MySQL может хоть и лучше в целом но с этим конкретно у него дела хуже. В Firebird конкретно вижу минус один - в том, что Firebird-хостингов мало, куда можно базу залить, а с MySQL - полнО. А для Firebird нужно покупать VPS (пусть даже линуксовый VPS, но все равно дороже обычного хостинга c MySQL). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 21:44 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
kdv Наталья87, Пока, до идеи перенести свой проект на Firebird 4.0, я не вижу никакого смысла менять IBX на FireDAC. Понятно. Поменяю для начала IBQuery на IBX где это возможно. Это малой кровью можно сделать. FireDAC как выяснилось не для скорости нужен как я думала изначально и уж трат ить месяцы чтобы перейти на него наверное не стоит ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 21:48 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87 Понятно. Поменяю для начала IBQuery на IBX где это возможно ... O tempora, o mores!! P.S. И где только работодатели берут таких, талантливых? Вот ваш покорный слуга, к примеру, уже два года как не может работу по профилю найти, Смешно сказать, пришлось с мая на бейсик с акцессом перейти. Увы нам.(( ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 22:18 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья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) кэшировать справочники в памяти программы, периодически читая последние изменения из БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 23:20 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
DmSer, ты предлагаешь переработать архитектуру здания тому, кто просит совета в выборе клея для обоев? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 23:23 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
DmSer Переход на другую библиотеку компонентов не поможет. Максимум позволит увеличить производительность в пару раз. <...> В пару раз? При переводе с IBX на FireDAC? Во так просто заменой библиотеки (сам то пробовал) ? Show must go on. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 23:37 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
[quot Vlad F#22395387] Наталья87 P.S. И где только работодатели берут таких, талантливых? Вот ваш покорный слуга, к примеру, уже два года как не может работу по профилю найти, Смешно сказать, пришлось с мая на бейсик с акцессом перейти. Увы нам.(( Думаю, разница в зарплате все объясняет. Может, вы к нам на 40 тысяч в месяц работать пойдете программистом? Неплохая зарплата в целом но для IT как я понимаю это копейки ... Хочется больше, но что то голова не варит совсем. Только на написание такого кода как есть хватает ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 23:41 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87, Не, на 40 тысяч, - решительно не пойду. У меня уже здоровье не на столько крепкое. И, снова, маленькие дети. P.S. Вот, разве что, консультантом.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 23:52 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Vlad F> Вот ваш покорный слуга, к примеру, уже два Vlad F> года как не может работу по профилю найти Ты вроде как переезжал для этого, с прицелом на Магнит IIRC? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 11:12 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87> У меня такой код, что открывает транзакции, Наталья87> которые долго висят - например, в ожидании Наталья87> диалогов пользователя. Очень удобно. Вам может и удобно, а в многопользовательской среде это неправильно. Правильнее делать короткие транзакции "когда нужно" - т.е. при закрытии диалогового окна, а не перед его открытием. Изучайте инструменты, которые пользуете, знания сами собой не нарисуются... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 11:14 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87 Гаджимурадов Рустам Наталья87> Другое дело в случае с правильно настроенным FireDAC. Вы уже пробовали протестировать на реальном примере или это умозрительные рассуждения? Именно на реальном примере. Всё работает действительно быстрее. Раза в два как минимум. Причём из коробки. А с несчастным IBX можно применять множественные запросы в теле одного запроса, кэширования и прочие ухищрения - но все равно на FireDAC в итоге всё работает быстрее и лучше. Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 11:46 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87Хочется больше, но что то голова не варит совсем. Вот поэтому-то к старости человек и приучается не делать всё разом, а разбивать работу на маленькие части. Желательно изолированные друг от друга, чтобы ошибка в одной части не обрушила всё. Переводите по одной форме за раз. И научитесь-таки пользоваться СКВ. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 14:19 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
kdv Так вот - а что вы будете делать, если FireDAC не будет поддерживать расширений Firebird 4.0 по типам данных? Надо будет установить RAD Studio 11 Update 1, когда он выйдет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 14:48 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
ъъъъъ Зато ibx/fib+ умеют сервисные вещи делать. Бэкапы-ресторы, валидацию т .д. А FireDAC не умеет. Ну, раньше не умел. Сейчас, возможно, уже умеет. Эксперт, RTFM ! https://docwiki.embarcadero.com/Libraries/Alexandria/en/FireDAC.Phys.IBBase https://docwiki.embarcadero.com/Libraries/Alexandria/en/FireDAC.Phys.FB ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 14:52 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Dmitry Arefiev, Крутяк! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 15:42 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Вам может и удобно, а в многопользовательской среде это неправильно. Правильнее делать короткие транзакции "когда нужно" - т.е. при закрытии диалогового окна, а не перед его открытием. Изучайте инструменты, которые пользуете, знания сами собой не нарисуются... У меня больше 3-х пользователей одновременно к базе практически не бывает. Генераторы легко решают проблемы конфликтов одновременного доступа. Держать транзакцию открытой просто удобно - программный код становится проще. Благо Firebird это позволяет - причём позволяет гораздо в большей степени чем какая либо другая СУБД, раз уж сделан выбор в пользу этой многоверсионной СУБД не вижу смысла не пользоваться её преимуществами. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 00:21 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Cobalt747 Не могли бы вы привести код этих двух примеров? Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX А нет уже этого кода. Эксперименты делались в 2017 году. За это время уже и комп поменялся, мусор и разные временные куски кода небыло смысла переносить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 00:33 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
DmSer Варианты решения проблемы: 1) работать в режиме RDP. С этом случае на терминалом сервере Windows может быть запущено множество экземпляров программы под учётными записями пользователей. Базу данных можно разместить на том же либо на соседнем сервере. Проблемы с подключением оборудования (и пробросом его на рабочие места операторов) так или иначе решаются. 2) вводить дополнительный сервер, общаться с ним, например с помощью rest-запросов (например, с передачей json-пакетов). В одном rest-запросе можно запросить сразу несколько таблиц. Использовать для наиболее критических участков программы. 3) переделывать наиболее критические участки (циклическая обработка большого количества записей таблицы) на хранимые процедуры либо EXETUTE BLOCK 5) кэшировать справочники в памяти программы, периодически читая последние изменения из БД. Это уже было частично сделано. Но всё равно тормозит. И всё это разное кэширование и код программы очень сильно усложняет и багов добавляет. Вариант рабочий разве что с RDP. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 01:12 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87 Гаджимурадов Рустам Вам может и удобно, а в многопользовательской среде это неправильно. Правильнее делать короткие транзакции "когда нужно" - т.е. при закрытии диалогового окна, а не перед его открытием. Изучайте инструменты, которые пользуете, знания сами собой не нарисуются... У меня больше 3-х пользователей одновременно к базе практически не бывает. Генераторы легко решают проблемы конфликтов одновременного доступа. Держать транзакцию открытой просто удобно - программный код становится проще. Благо Firebird это позволяет - причём позволяет гораздо в большей степени чем какая либо другая СУБД, раз уж сделан выбор в пользу этой многоверсионной СУБД не вижу смысла не пользоваться её преимуществами. А если транзакции будут долго висеть - то главная проблема, которая возникнет - будут накапливаться именно эти самые версии, и в итоге база обязательно станет колом. При чем это случится даже если у вас 1 пользователь. Есть в FB лазейка для "открытых подолгу гридов" - read only read commited транзакции. Именно read only. Но даже так - это плохо и проблемы будут возможны - как минимум, это издевательство над сервером. Но если у вас пишущие транзакции висят - то крах вообще неминуем. Вом не зря дали совет почитать об инструменте, который используете. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 02:18 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
YuRock крах вообще неминуем. Ну запугал, так запугал.)) Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 09:27 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Наталья87 Cobalt747 Не могли бы вы привести код этих двух примеров? Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX А нет уже этого кода. Эксперименты делались в 2017 году. За это время уже и комп поменялся, мусор и разные временные куски кода небыло смысла переносить. Наталья, имхо, тогда была допущена существенная ошибка в экспериментах. К чему народ и пытается вас аккуратно подвести. Не может FireDAC работать с FB быстрее IBX. Его преимущества в другом. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 09:33 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Vlad F Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет. 1. Транзакции таки ридонли 2. Настроено что-то вроде еженощного бэкап-рестора базы. В других случаях не вижу, как такая база может прожить больше нескольких дней. Если отключить sweep-интервал - месяцев. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 12:51 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
YuRock, При отсутствии конкурирующих транзакций, запускаемых вслед за текущей активной, длительность ее активности не играет никакой деструктивной роли.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 13:05 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
Vlad F Не может FireDAC работать с FB быстрее IBX. Его преимущества в другом. Я уже все поняла. Не буду переходить с IBX на FireDAC, оно того не стоит. Тем более по методу от Dimitry Sibiryakov. Лучше не тратить на это время, а сам проект развивать, там непаханое поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 13:57 |
|
Перевод проекта с IBX на FireDAC
|
|||
---|---|---|---|
#18+
YuRock Vlad F Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет. 1. Транзакции таки ридонли 2. Настроено что-то вроде еженощного бэкап-рестора базы. В других случаях не вижу, как такая база может прожить больше нескольких дней. Если отключить sweep-интервал - месяцев. Нормально всё живёт годами. Вы наверное про какие то высоконагруженные системы. С моими базами одновременно работает 2-3 пользователя, ну иногда максимум 10, да и то разве что в порядке исключения. Если база замусоривается, файл растёт в размерах и производительность падает - это легко решается обычным Backup&Restore. В общем, Firebird - простая и удобная СУБД, при разработке продуктов для малого бизнеса просто идеальна, за что её думаю и ценят. При этом она вполне на уровне "взрослых" СУБД хоть и имеет какие-то недостатки, но в случае малого бизнеса (а не высоконагруженных систем) они несущественны. За всё время работы из всех недостатков только два обнаружила - снижение скорости работы со временем, по этой причине необходимость периодически делать backup&restore; невосстановимые бэкапы, что не дает встроить в продукт загрузку данных из бэкапов для юзеров; ну и еще базы периодически повреждаются при отключении света - но так чтобы часто это не недостаток Firebird думаю у остальных СУБД с этим не лучше а может еще и хуже тк многоверсионник по типу Firebird убить отключениями света по идее сложнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 14:04 |
|
|
start [/forum/topic.php?fid=58&msg=40111807&tid=2036862]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 274ms |
total: | 418ms |
0 / 0 |