В общем накидал небольшой тест, пока только для 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 довольно сильный тормоз при чтении полей и навигации, хотя это скорее обратная сторона его конька - универсальности.
Жду ваших отзывов
Добавлено спустя 45 минут 9 секунд:Забыл сказать, FIB при открытии/закрытии то ли курсор меняет, то ли еще что-то делает, но при этом курсор постоянно дергается из стрелки в ожидание. Ну проект вроде как в заброшенном состоянии, последняя версия от 2007 года.
Добавлено спустя 4 часа 30 минут 42 секунды:Добавил в тест добавление еще 5000 записей с фиксированием транзакции после каждой вставки (тест №2). Соответственно для последующих тестов увеличилось количество записей для тестирования в 2 раза до 10000, результаты:
FB_test.jpg
Добавлено спустя 12 минут 13 секунд:Интересный результат дает увеличение количества записей с 5000 до 10000 для 1 и 2 теста. Видимо начинают усиленно работать внутренние механизмы птички, идет постоянное обращение к диску, результат:
FB_test.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.