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

Откуда:
Сообщений: 114
YuRock
Наталья87
А если не быстрее - зачем тогда он нужен вообще этот FireDAC (если он не быстрее IBX)?
Для мульти-СУБД-разработки, зачем же еще. Он поддерживает не только Firebird.


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

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

В Firebird конкретно вижу минус один - в том, что Firebird-хостингов мало, куда можно базу залить, а с MySQL - полнО. А для Firebird нужно покупать VPS (пусть даже линуксовый VPS, но все равно дороже обычного хостинга c MySQL).
12 ноя 21, 21:44    [22395367]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
kdv
Наталья87,
Пока, до идеи перенести свой проект на Firebird 4.0, я не вижу никакого смысла менять IBX на FireDAC.


Понятно. Поменяю для начала IBQuery на IBX где это возможно. Это малой кровью можно сделать. FireDAC как выяснилось не для скорости нужен как я думала изначально и уж трат ить месяцы чтобы перейти на него наверное не стоит ...
12 ноя 21, 21:48    [22395370]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Vlad F
Member

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

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

O tempora, o mores!!

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

Сообщение было отредактировано: 12 ноя 21, 22:18
12 ноя 21, 22:18    [22395387]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1457
Наталья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 ноя 21, 23:20    [22395425]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2657
DmSer,

ты предлагаешь переработать архитектуру здания тому, кто просит совета в выборе клея для обоев?
12 ноя 21, 23:23    [22395426]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Vlad F
Member

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

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

В пару раз? При переводе с IBX на FireDAC? Во так просто заменой библиотеки (сам то пробовал) ?
Show must go on. ))
12 ноя 21, 23:37    [22395431]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
[quot Vlad F#22395387]
Наталья87

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


Думаю, разница в зарплате все объясняет.
Может, вы к нам на 40 тысяч в месяц работать пойдете программистом? Неплохая зарплата в целом но для IT как я понимаю это копейки ...
Хочется больше, но что то голова не варит совсем. Только на написание такого кода как есть хватает ...
12 ноя 21, 23:41    [22395434]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Vlad F
Member

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

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

P.S. Вот, разве что, консультантом.))

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

Откуда:
Сообщений: 63461
Vlad F> Вот ваш покорный слуга, к примеру, уже два
Vlad F> года как не может работу по профилю найти

Ты вроде как переезжал для этого, с прицелом на Магнит IIRC?

Posted via ActualForum NNTP Server 1.5

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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


Именно на реальном примере. Всё работает действительно быстрее. Раза в два как минимум.
Причём из коробки. А с несчастным IBX можно применять множественные запросы в теле одного запроса, кэширования и прочие ухищрения - но все равно на FireDAC в итоге всё работает быстрее и лучше.
Не могли бы вы привести код этих двух примеров?
Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX
13 ноя 21, 11:46    [22395504]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Dimitry Sibiryakov
Member

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

Наталья87
Хочется больше, но что то голова не варит совсем.

Вот поэтому-то к старости человек и приучается не делать всё разом, а разбивать
работу на маленькие части. Желательно изолированные друг от друга, чтобы ошибка
в одной части не обрушила всё. Переводите по одной форме за раз. И
научитесь-таки пользоваться СКВ.

Posted via ActualForum NNTP Server 1.5

13 ноя 21, 14:19    [22395555]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9993
kdv
Так вот - а что вы будете делать, если FireDAC не будет поддерживать расширений Firebird 4.0 по типам данных?

Надо будет установить RAD Studio 11 Update 1, когда он выйдет :)
13 ноя 21, 14:48    [22395563]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9993
ъъъъъ
Зато 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 ноя 21, 14:52    [22395566]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2657
Dmitry Arefiev,

Крутяк! :)
13 ноя 21, 15:42    [22395584]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

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

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


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

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

Откуда:
Сообщений: 114
Cobalt747
Не могли бы вы привести код этих двух примеров?
Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX


А нет уже этого кода. Эксперименты делались в 2017 году. За это время уже и комп поменялся, мусор и разные временные куски кода небыло смысла переносить.
14 ноя 21, 00:33    [22395737]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

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

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


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

Откуда: Донецк
Сообщений: 4936
Наталья87
Гаджимурадов Рустам

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


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

Вом не зря дали совет почитать об инструменте, который используете.
14 ноя 21, 02:18    [22395744]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Vlad F
Member

Откуда:
Сообщений: 1451
YuRock
крах вообще неминуем.


Ну запугал, так запугал.))
Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет.
14 ноя 21, 09:27    [22395755]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Vlad F
Member

Откуда:
Сообщений: 1451
Наталья87
Cobalt747
Не могли бы вы привести код этих двух примеров?
Хочется тоже поковыряться в этом - мы тоже используем Firebird+IBX

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

Наталья, имхо, тогда была допущена существенная ошибка в экспериментах. К чему народ и пытается вас аккуратно подвести.
Не может FireDAC работать с FB быстрее IBX. Его преимущества в другом.
14 ноя 21, 09:33    [22395756]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4936
Vlad F
Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет.
Ну значит одно из двух:
1. Транзакции таки ридонли
2. Настроено что-то вроде еженощного бэкап-рестора базы.

В других случаях не вижу, как такая база может прожить больше нескольких дней. Если отключить sweep-интервал - месяцев.
14 ноя 21, 12:51    [22395796]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Vlad F
Member

Откуда:
Сообщений: 1451
YuRock,

При отсутствии конкурирующих транзакций, запускаемых вслед за текущей активной, длительность ее активности не играет никакой деструктивной роли.))
14 ноя 21, 13:05    [22395798]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

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

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


Я уже все поняла. Не буду переходить с IBX на FireDAC, оно того не стоит. Тем более по методу от Dimitry Sibiryakov. Лучше не тратить на это время, а сам проект развивать, там непаханое поле.
14 ноя 21, 13:57    [22395816]     Ответить | Цитировать Сообщить модератору
 Re: Перевод проекта с IBX на FireDAC  [new]
Наталья87
Member

Откуда:
Сообщений: 114
YuRock
Vlad F
Так понимаю, что там многолетние агиевы конюшни, но краха пока нет как нет.
Ну значит одно из двух:
1. Транзакции таки ридонли
2. Настроено что-то вроде еженощного бэкап-рестора базы.

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


Нормально всё живёт годами. Вы наверное про какие то высоконагруженные системы. С моими базами одновременно работает 2-3 пользователя, ну иногда максимум 10, да и то разве что в порядке исключения. Если база замусоривается, файл растёт в размерах и производительность падает - это легко решается обычным Backup&Restore. В общем, Firebird - простая и удобная СУБД, при разработке продуктов для малого бизнеса просто идеальна, за что её думаю и ценят. При этом она вполне на уровне "взрослых" СУБД хоть и имеет какие-то недостатки, но в случае малого бизнеса (а не высоконагруженных систем) они несущественны. За всё время работы из всех недостатков только два обнаружила - снижение скорости работы со временем, по этой причине необходимость периодически делать backup&restore; невосстановимые бэкапы, что не дает встроить в продукт загрузку данных из бэкапов для юзеров; ну и еще базы периодически повреждаются при отключении света - но так чтобы часто это не недостаток Firebird думаю у остальных СУБД с этим не лучше а может еще и хуже тк многоверсионник по типу Firebird убить отключениями света по идее сложнее.
14 ноя 21, 14:04    [22395822]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
Все форумы / Delphi Ответить