Компоненты для доступа к Firebird

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Компоненты для доступа к Firebird

Сообщение SeZuka » 15.04.2013 12:42:25

Подскажите, какие компоненты лучше использовать для работы с базой Firebird?
FIBL
UIB
ZeosLib
И желательно с комментариями, чем предложенный вами компонент лучше других.
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Re: Компоненты для доступа к Firebird

Сообщение svk12 » 15.04.2013 14:57:10

Ещё есть SQLDb в комплекте Лазаруса и
IBX For Lazarus (Firebird Express) - http://www.mwasoftware.co.uk/index.php?option=com_content&task=view&id=102&Itemid=133.

Пользуюсь Зеосом, поскольку подключаюсь также и к SQlite, и, кроме того, у него есть удобная вещь - SQL monitor.
Но утверждать, что Зеос лучше других, не возьмусь...
svk12
постоялец
 
Сообщения: 407
Зарегистрирован: 09.06.2008 18:42:47

Re: Компоненты для доступа к Firebird

Сообщение hovadur » 15.04.2013 15:30:26

Я тоже пользуюсь Зеосом, поскольку подключаюсь также и к SQlite, но также
svk12 писал(а):утверждать, что Зеос лучше других, не возьмусь...
hovadur
постоялец
 
Сообщения: 116
Зарегистрирован: 31.01.2013 15:50:41

Re: Компоненты для доступа к Firebird

Сообщение Brainenjii » 15.04.2013 15:43:09

я пользуюсь UIB. Синдром утёнка.
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Компоненты для доступа к Firebird

Сообщение Little_Roo » 15.04.2013 16:49:59

Пользую Zeos, поскольку... все ПОКА устраивает :shock:
Но,
Brainenjii писал(а):утверждать, что Зеос лучше других, не возьмусь...

Хотя, исправления-обновления выходят регулярно, и хвосты чистят быстро.
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 638
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Компоненты для доступа к Firebird

Сообщение SeZuka » 16.04.2013 05:59:08

А по скорости, есть какие либо сравнения?
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Re: Компоненты для доступа к Firebird

Сообщение SeZuka » 19.04.2013 09:50:54

В общем накидал небольшой тест, пока только для SQLdb, UIB, Zeos, FIB, до IBX руки еще не дошли.
Вот результаты:
FB_test.jpg

1. Вставляем в таблицу 5000 строк с полями VARCHAR и INT, "INSERT INTO Test (Key, Val) VALUES (:Key, :Val)", значения в запрос передаются через параметры, значения для всех строк (Key и Val) случайны, но для всех компонентов одинаковы, транзакция одна после всех вставок и в результат теста не идет.
2. 1000 раз открываем и закрываем запрос "SELECT * FROM Test"
3. 1000 раз пробегаем по всем записям запроса от начала и до конца и снова с начала и читаем значения (Key и Val)
4. 1000 раз бегаем по записям от начала до конца, потом до начала и опять.

Как видно, самый шустрый это UIB, но замечен один глюк у него, код:

Код: Выделить всё
c := 0;
UIBQ.Open;
while not UIBQ.EOF do begin
  UIBQ.Next;
  inc(c);
end;
while not UIBQ.BOF do begin
  UIBQ.Prior;
  dec(c);
end;

вернет в конце с=1, т.е. на заднем ходе делается на шаг меньше, последняя строка в тесте это показывает, для 1000 повторов 4 теста, у всех остальных компонентов с этим проблем нет.

Для Zeos замечен глюк с преобразованием типов параметров, запрос у всех один "INSERT INTO Test (Key, Val) VALUES (:Key, :Val)", где Key VARCHAR и Val INT, следующий код:

Код: Выделить всё
// Str: TStringList - список значений, которые пишутся в тестовую таблицу, что то типа 'hbIKH=328947'

// SQLdb
SQLQ.Params.ParamValues['Key'] := Str.Names[i];
SQLQ.Params.ParamValues['Val'] := Str.Values[SQLQ.Params.ParamValues['Key']];

// UIB
UIBQ.Params.ByNameAsVariant['Key'] := Str.Names[i];
UIBQ.Params.ByNameAsVariant['Val'] := Str.Values[UIBQ.Params.ByNameAsVariant['Key']];

// Zeos
ZQ.Params.ParamValues['Key'] := Str.Names[i];
ZQ.Params.ParamValues['Val'] := Str.Values[ZQ.Params.ParamValues['Key']];

// FIB
FIBQ.Params.ByName['Key'].Value := Str.Names[i];
FIBQ.Params.ByName['Val'].Value := Str.Values[FIBQ.Params.ByName['Key'].Value];

работает для всех кроме Zeos, который в Val все время пишет 0. Специально под него пришлось делать явное преобразование:

Код: Выделить всё
ZQ.Params.ParamValues['Key'] := Str.Names[i];
ZQ.Params.ParamValues['Val'] := StrToInt(Str.Values[ZQ.Params.ParamValues['Key']]);

Ну и как видите, Zeos довольно сильный тормоз при чтении полей и навигации, хотя это скорее обратная сторона его конька - универсальности.
Жду ваших отзывов :D

Добавлено спустя 45 минут 9 секунд:
Забыл сказать, FIB при открытии/закрытии то ли курсор меняет, то ли еще что-то делает, но при этом курсор постоянно дергается из стрелки в ожидание. Ну проект вроде как в заброшенном состоянии, последняя версия от 2007 года.

Добавлено спустя 4 часа 30 минут 42 секунды:
Добавил в тест добавление еще 5000 записей с фиксированием транзакции после каждой вставки (тест №2). Соответственно для последующих тестов увеличилось количество записей для тестирования в 2 раза до 10000, результаты:
FB_test.jpg


Добавлено спустя 12 минут 13 секунд:
Интересный результат дает увеличение количества записей с 5000 до 10000 для 1 и 2 теста. Видимо начинают усиленно работать внутренние механизмы птички, идет постоянное обращение к диску, результат:
FB_test.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

Рейтинг@Mail.ru