![]() |
Модераторы: Akella |
![]() ![]() ![]() |
|
Arnold Lane |
|
|||
Unregistered |
Я только-только начал переходить с BDE на InterBase, вернее на FireBird. Так вот, в реальном проекте у меня происходит следующее, таблица содержащая некие данные при определенных условиях, очищается и вновь заполняется схожими , но обновленными данными, из текстового файла. При работе с BDE, заполнение происходит приблизительно за пол-минуты. Использую при этом стандартный набор, TTable с закладки BDE и методы Insert и Post. Перевожу проект на использование InterBase. Эффект очень интересный, то же самое обновление таблицы происходит на порядок медленее, минут за пять. И это при том что машина у меня далеко не слабая. При этом использую стандартные компоненты с закладки InterBase - TIBDataBase, TIBTransaction, TIBDataSet. Из вводных остается наверное добавить, использую сервер FireBird 1.5 SuperServer, и клиент и сервер расположены на одной машине.
Теперь собственно суть. Я понимаю, что технологии InterBase расчитаны на многопользовательский режим и на работу с удаленными базами. И все же, неужели при однопользовательском режиме и локальном расположении базы такое снижение быстродействия по сравнению с BDE? Или я чего-то недопонимаю, и не так делаю? |
|||
|
||||
SPrograMMer |
|
||||
![]() Спамер :) ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 5.11.2004 Где: Краснодар Репутация: нет Всего: 6 |
угу + TIBQuery а вот
-------------------- животное = зверь законченный гентушник |
||||
|
|||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
Все зависит, от того, что за таблицу вы обновляете. При большом обновлении лучше отключить индексы, что бы они не пересчитывались при добавлении каждой новой записи, а после обновления опять включить индексы. Каждая ситуация требует индивидуального подхода FireBird это не dbf и возможности у него не сравнимо больше, но нужно знать, что и когда применять. И еще советую перейти на FIBPlus
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Arnold Lane |
|
|||
Unregistered |
To SPrograMMer - использование компонента TIBDataSet вместо привычных TIBTable и TIBQuery, советуют авторы книги Мир InterBase. Настойчиво советуют. И я вынужден с ними согласиться. Во-первых это как-то изящней что ли, во-вторых, касательно именно моей проблемы, никакой разницы в работе этих компонентов.
To Alex - 1. Никаких индексов в этой таблице вообще не существует. 2. Количество обновляемых записей приблизительно равно 10 тысячам. 3. Завтра попробую использовать компоненты FIBPlus. Правда не покидает плохое предчувствие, что сильно делу они не помогут. В любом случае не оставляет чувство , что я где-то не "выключил утюг". Ну не может быть такой разницы. BDE - 30 сек., FireBird - 5 мин. Какие бы различия в архитектуре бы не были. |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
А можно код посмотреть?
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
Вот пример добавления 10000 записей при этом на моей машине этот код выполняется чуть больше 5 секунд
Присоединённый файл ( Кол-во скачиваний: 44 ) ![]() -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
ArnoldLane |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 14.6.2005 Репутация: нет Всего: нет |
To Alex Действительно используя TIBQuery добился более или менее приличного быстродействия. Но остается одно "но". При использовании TIBDataSet (на чем настаивают авторы "Мир interBase") и TIBTable, бысродействие, или пожалуй правильней сказать, медленодействие шокирующее. Хотя логика здравого смысла и тот небольшой багаж знаний, который я имею, позволяли до сего момента считать, что при операции вставки записей в таблицу разница в эффективности между SQL-запросом и прямым доступом минимальна. А c TIBDataSet вообще бредятина какая-то получается, по сути дело при выполнения метода TIBDataSet->Insert(), происходит выполнения SQL-запроса, полностью аналогичному запросу компонента TIBQuery. Но факт остается фактом - TIBDataSet и TIBTable в разы медленее TQuery.
P.S. Код я постараюсь вскоре показать. Просто дело в том, что проект реальный и очень большой, необходимо вычленить код непосредственно касаемый данной темы. А на это необходимо время, а со временем пока ужасный "Zeit not". Вот и сумничал. |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
ArnoldLane, Несмотря на то, что я очень уважаю авторов книги, но этот их совет у меня уже в печенках сидит. Реализация этого компонента оставляет желать лучшего. Его медлительность лично я объясняю для себя тем, что они работают через параметры, а на преобразование данных и другие манипуляции с параметрами требуется время. Но те задержки, о которых вы говорите это просто не реальные цифры создается впечатление, что у вас не оптимизирован сам алгоритм подготовки данных для заполнения.
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
AZDesign |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 24.6.2005 Репутация: нет Всего: нет |
1) удалять 10000 записей и потом добавлять их снова - это значить не понимать SQL
2) в твоем примере происходит следующее : а) установить соединение б) добавить ОДНУ!!!!! запись в) закрыть соединение г) Начасть все сначала для большего удивления можно после каждого оператора поставить задержку на пару дней. 3) у Димы Кузьменко на сайте www.ibase.ru есть статья как поднять быстродействие за счет HDD. Т.е. для быстрой работы нужно иметь ТРИ HDD и клиент должен быть на отдельном компьютере Мне удалось проверить его рекоментации, правда вставка записей была через isql.exe - быстродействие увеличилось в 6 раз по сравнению с расположением всех файлов на 1 винчестере В тесте выполнялась вставка 600000 записей, при этом для каждой записи предварительно выполнялось 4 запроса и внутри триггера Insert еще 4 запроса и некоторая вычислительная работа. На все ушло 14 часов. Для простых вставок как у тебя быстродействие увеличивается еще больше. |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
Это вы про какой пример? -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
AZDesign |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 24.6.2005 Репутация: нет Всего: нет |
А тот который TestFB.rar
Или я это сам придумал |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
AZDesign, и где я добавляю одну запись и закрываю соединение? Если вы все же посмотрите код, то увидите, что commit я делаю, только после добавления всех записей
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Владимр |
|
|||
Unregistered |
Для массовой заливке надо использовать IBSQL или его аналоги, не связанные со средствами визуализации.
Всю вставку в 1 транзакции. Вчера мерял - вставка 1м записей 115 секунд.Компоненты IBX 850MHz,128MB/ |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Interbase" | |
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |