Выбор компонентов доступа к данным для проекта

Печать

 Выбор сделан – в очередной раз я выбираю компоненты доступа к данным от компании DevArt

Иcтория вопроса

Наш проект «Дела&Финансы» (www.del-fin.ru) стартовал в 1999 году и нам нужна была возможность работать с разными СУБД, поэтому в качестве технологии работы с данными использовали безальтернативный BDE. После выхода СУБД Firebird у нас уже не было необходимости поддерживать несколько серверов так как все что нам нужно было от базы данных мы могли реализовать на сервере Firebird. Заказчики росли, увеличивали количество рабочих мест (коннектов к базе данных), переходили на круглосуточную работу и тут мы столкнулись с проблемой «накопления мусора» и необходимостью периодически запускать «сборку мусора» в монопольном режиме, но заказчики хотели работать без перерыва и перед нами встала задача рефакторинга всего проекта для использования конкурентных преимуществ серверов Interbase/Firebird – работа в одном коннекте с несколькими транзакциями (читать данные в долгой Read-only транзакции без накопления мусора, менять данные в короткой Write транзакции). Пришло время менять технологию доступа к данным.
Шел 2005 год. Компания Borland забросила развитие BDE в 2001 году, разработала новую технологию универсального доступа к данным DBExpress и пообещала, что DBExpress это круто, навсегда и всем будет счастье, а BDE это тупик и фигня. Мы им поверили и выбрали DBExpress. Счастье оказалось только на бумаге – пришлось ковыряться в исходных кодах DBExpress что бы поднять производительность системы до уровня BDE, найти оптимальный драйвер (заставить Borland доработать собственный драйвер это было нереально). Для организации работы с разными типами транзакций компания Upscene доработала для нас свой драйвер (добавлены Custom параметры транзакций), все было прекрасно, заказчики работали без выходных, но некоторые режимы, связанные с тяжелыми и большими обновлениями данных работали все же заметно медленнее чем старый проект на BDE. Я долго и без успеха приставал к Мартину из Upscene что бы он разогнал свой драйвер, но тут кто-то в форуме Upscene кивнул в сторону драйвера от компании DevArt, я протестировал его и выяснил что этот драйвер работает быстрее в среднем на 10%. Разработчики из DevArt доработали свой драйвер для нас (добавлены Custom параметры транзакций), и с 2010 года мы используем именно их драйвер в нашей системе «Дела&Финансы».
Время не стоит на месте и вот уже пролетело 12 лет со дня выхода в свет любимого нами Delphi 7, у нас уже есть лицензии на Delphi XE5 Professional (приобрели для другого проекта), и как вы думаете какая мысль постоянно мешает спать? Правильно - не перевести ли нам наш проект «Дела&Финансы» на Delphi XE5?
Голова боится – руки делают: 24 часа работы и все – вот он компилируется, запускается, подключается к базе, но счастья как всегда нет. Разработчики Delphi два раза успели обновить технологию DbExpress со второй версии до четвертой и сначала убили возможность гибкого управления транзакциями для каждого запроса (исчезло свойство TransactionLevel) а потом вообще купили себе новую игрушку - технологию AnyDAC назвали её FireDAC, а про DBExpress сказали, что ей лучше ей не пользоваться (только у меня одного дежавю?). А мы хотим, но не можем. И вот снова муки выбора.

Параметры проекта

Система «Дела&Финансы» предназначена для автоматизации бизнес-процессов в предприятиях оптовой и розничной торговли, производстве продуктов питания и электронных приборов, предприятий общепита (клубы, бары, рестораны, столовые). Большая часть экранных форм создается в Runtime на основе метаданных. описывающих сущности. Компоненты доступа данных наследники от DBExpress. Клиентское приложение работает в среде Windows. Есть несколько приложений для Windows CE, Android и iOS для решения узких задач (мобильные приложения). Система установлена и ежедневно работает более чем на 3000 рабочих мест, кое где в круглосуточном режиме, на территории всей России. Наша фишка - это работа с большим ассортиментом товаров (у некоторых клиентов он больше 1 млн (миллиона) наименований), именно поэтому многие наши клиенты книготорговые компании.
Сопровождается система как партнерами, так и напрямую нашей компанией. Обновления системы выходят еженедельно уже на протяжении 14 лет. То есть все серьезно - надежность наше все.
Возврата инвестиций на миграцию проекта не ожидается, делаем все из любви к прекрасному.

Процесс выбора

Технологический отбор

Составил список претендентов:
• FIBPlus от компании Devrace (www.devrace.com)
• FireDAC от Embarcadero (www.embarcadero.ru)
• IBDAC и UniDAC от DevArt (www.devart.com).
Изучил интерфейсы, написал несколько тестов по работе с большими выборками данных и работе в режиме кэшированных апдейтов и параллельными транзакциями.
Результаты усредненных значений тестов сведены в таблице

Продукт
Открывает запрос
Фетч 125000 записей в память
Изменение 125000 записей в кэше
ApplyUpdates (применение изменений в базе данных)
Время Сек.
Память Мб
Время Сек
Память Мб
Время Сек
Память Мб
Время Сек
Память Мб
FIBPlus
0.04
6.6
5.486
212
5.994
420
65.194
430
FireDAC (FireDACClient/ServerPack для DelphiProfessional)
0.07
6.5
5.069
280
6.690
540
97.002
665
UniDAC
0.01
6.4
4.655
305
6.519
534
55.576
534
IBDAC
0.01
6.3
4.700
305
6.460
534
47.906
534
 
• FIBPlus – лидер по потребляемой приложением памяти, но скорее именно из за этого не подошел – вместо TParam у него очень специфический TFIBXSQLVAR и очень много кода придется переписывать. 
• IBDAC и UniDAC (для Firebird) – идут ноздря – в ноздрю (это говорит о том что универсальный Фреймворк UniDAC разработан очень качественно и универсальность не приводит к потерям в производительности). Компоненты от компании DevArt показали чуть выше производительность в моих тестах и по предварительной оценке на них проще перевести проект чем на FIBPlus, а так как на одном объекте мы реализовали интеграцию со сторонней системой управления гостиницей и подключаемся для этого напрямую к базе MSSQL то UniDAC предпочтительнее, в дальнейшем у нас будет меньше проблем. Так же отмечена фишка – параметр «Prepare для автоматически сгенерированных запросов» - я вижу в мониторинге базы данных, что при её использовании один и тот же statement выполняется много раз на стороне сервера, наверняка это уменьшит нагрузку на сервер.
• FireDAC оказался самым прожорливым по потребляемой памяти, возможно это решается настройками мапирования памяти под каждый SQL запрос, но в нашей системе запросы формируются в Runtime на основании метаданных описывающих сущности, которыми оперируют бизнес-процессы и для автоматического создания правил мапирования нужно будет потрудиться и экспериментировать. Если обойтись без мапирования, то по моей оценке на эти компоненты еще проще мигрировать чем на все указанные выше.

Экономическая оценка затрат

Стоимость приобретения и владения сведена в таблицу
Продукт

Стоимость приобретения в минимальном, но необходимом варианте поставки, руб.

Стоимость ежегодного обновления, руб.
Примерные затраты на 3 года, руб.
FIBPlus
3 600
1 800
7 200
IBDAC
6 747
2 697
12 141
UniDAC
13 500
6 297
26 094
FireDAC (FireDAC Client/Server Pack для Delphi Professional)
23 504
13 993 
51 490
 

Ментальный отбор

FIBPlus
Последняя новость на сайте FIBPlus от 03.06.2013. В форумах народ задает вопросы «жив проект или умер». Судьба проекта непонятна. Я всегда этого боялся при использовании сторонних библиотек. Лицензии на этот продукт у меня уже есть, я попробовал мигрировать на них, но уперся в серьезные проблемы, которые командой «найти и заменить» не решаются.
FireDAC (FireDAC Client/Server Pack для Delphi Professional)
Проектом заведует Embarcadero, вероятность повлиять на развитие этого продукта (получить требуемые доработки), по моим ощущениям, стремится к нулю. Циклы обновления библиотеки, скорее всего, будут как у самой среды разработки – полугодовые. Приобретение этого пакета увеличит затраты при желании мигрировать на следующую версию Delphi Professional. Не постигнет ли его судьба и DBExpress? В своих проектах мы используем в 100% случаях СУБД Firebird а это прямой конкурент для Interbase от Embarcadero. Отсутствие физического драйвера Firebird в FireDAC для мобильных платформ не является ли подтверждением этой конкуренции? Наличие драйвера FireDAC для Firebird на платформе Android, многократно увеличил бы преимущества этой библиотеки, тогда и такая высокая цена была бы оправдана. FireDAC за эти деньги поставляется с исходными кодами, но это преимущество не большое – важнее что бы авторы сами развивали свой продукт, а версии «эконом» без исходных кодов нет и не предвидится.
IBDAC и UniDAC.
В наборе универсальных компонентов UniDAC есть специализированные компоненты для сервера Firebird. Компания DevArt оперативно реагирует на запросы в службу поддержки, и меня есть положительный опыт работы с разработчиками - они уже дорабатывали свой продукт для нас. Это должно снизить риски миграции проекта на их компоненты. Предварительная оценка работ дает понимание что на эти компоненты мигрировать проще чем на FIBPlus, а использование UniDAC позволит подключаться к базам MSSQL что облегчит интеграцию.

Результат

После недели тестов, раздумий, чтения блогов и форумов (особо понравилась дуэль благородных донов DevArt и Da-Soft на SQL.ru) я решил мигрировать свой проект на компоненты UniDAC.