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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстродействие InterBase, Крайняя степень удивления 
:(
    Опции темы
Arnold Lane
Дата 14.6.2005, 20:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я только-только начал переходить с BDE на InterBase, вернее на FireBird. Так вот, в реальном проекте у меня происходит следующее, таблица содержащая некие данные при определенных условиях, очищается и вновь заполняется схожими , но обновленными данными, из текстового файла. При работе с BDE, заполнение происходит приблизительно за пол-минуты. Использую при этом стандартный набор, TTable с закладки BDE и методы Insert и Post. Перевожу проект на использование InterBase. Эффект очень интересный, то же самое обновление таблицы происходит на порядок медленее, минут за пять. И это при том что машина у меня далеко не слабая. При этом использую стандартные компоненты с закладки InterBase - TIBDataBase, TIBTransaction, TIBDataSet. Из вводных остается наверное добавить, использую сервер FireBird 1.5 SuperServer, и клиент и сервер расположены на одной машине.
Теперь собственно суть. Я понимаю, что технологии InterBase расчитаны на многопользовательский режим и на работу с удаленными базами. И все же, неужели при однопользовательском режиме и локальном расположении базы такое снижение быстродействия по сравнению с BDE? Или я чего-то недопонимаю, и не так делаю?
  Вверх
SPrograMMer
Дата 14.6.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: нет
Всего: 6



Цитата
компоненты с закладки InterBase - TIBDataBase, TIBTransaction,

угу + TIBQuery
а вот
Цитата
TIBDataSet
чета-ниочень....


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Alex
Дата 14.6.2005, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Все зависит, от того, что за таблицу вы обновляете. При большом обновлении лучше отключить индексы, что бы они не пересчитывались при добавлении каждой новой записи, а после обновления опять включить индексы. Каждая ситуация требует индивидуального подхода FireBird это не dbf и возможности у него не сравнимо больше, но нужно знать, что и когда применять. И еще советую перейти на FIBPlus


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Arnold Lane
Дата 14.6.2005, 23:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











To SPrograMMer - использование компонента TIBDataSet вместо привычных TIBTable и TIBQuery, советуют авторы книги Мир InterBase. Настойчиво советуют. И я вынужден с ними согласиться. Во-первых это как-то изящней что ли, во-вторых, касательно именно моей проблемы, никакой разницы в работе этих компонентов.
To Alex - 1. Никаких индексов в этой таблице вообще не существует.
2. Количество обновляемых записей приблизительно равно 10 тысячам.
3. Завтра попробую использовать компоненты FIBPlus. Правда не покидает плохое предчувствие, что сильно делу они не помогут.
В любом случае не оставляет чувство , что я где-то не "выключил утюг". Ну не может быть такой разницы. BDE - 30 сек., FireBird - 5 мин. Какие бы различия в архитектуре бы не были.


  Вверх
Alex
Дата 15.6.2005, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



А можно код посмотреть?


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 15.6.2005, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Вот пример добавления 10000 записей при этом на моей машине этот код выполняется чуть больше 5 секунд

Присоединённый файл ( Кол-во скачиваний: 44 )
Присоединённый файл  TestFB.rar 33,57 Kb


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
ArnoldLane
Дата 21.6.2005, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 14.6.2005

Репутация: нет
Всего: нет



To Alex Действительно используя TIBQuery добился более или менее приличного быстродействия. Но остается одно "но". При использовании TIBDataSet (на чем настаивают авторы "Мир interBase") и TIBTable, бысродействие, или пожалуй правильней сказать, медленодействие шокирующее. Хотя логика здравого смысла и тот небольшой багаж знаний, который я имею, позволяли до сего момента считать, что при операции вставки записей в таблицу разница в эффективности между SQL-запросом и прямым доступом минимальна. А c TIBDataSet вообще бредятина какая-то получается, по сути дело при выполнения метода TIBDataSet->Insert(), происходит выполнения SQL-запроса, полностью аналогичному запросу компонента TIBQuery. Но факт остается фактом - TIBDataSet и TIBTable в разы медленее TQuery.
P.S. Код я постараюсь вскоре показать. Просто дело в том, что проект реальный и очень большой, необходимо вычленить код непосредственно касаемый данной темы. А на это необходимо время, а со временем пока ужасный "Zeit not". Вот и сумничал.
PM MAIL   Вверх
Alex
Дата 21.6.2005, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



ArnoldLane, Несмотря на то, что я очень уважаю авторов книги, но этот их совет у меня уже в печенках сидит. Реализация этого компонента оставляет желать лучшего. Его медлительность лично я объясняю для себя тем, что они работают через параметры, а на преобразование данных и другие манипуляции с параметрами требуется время. Но те задержки, о которых вы говорите это просто не реальные цифры создается впечатление, что у вас не оптимизирован сам алгоритм подготовки данных для заполнения.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
AZDesign
Дата 24.6.2005, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.6.2005

Репутация: нет
Всего: нет



1) удалять 10000 записей и потом добавлять их снова - это значить не понимать SQL
2) в твоем примере происходит следующее :
а) установить соединение
б) добавить ОДНУ!!!!! запись
в) закрыть соединение
г) Начасть все сначала

для большего удивления можно после каждого оператора поставить задержку на пару дней.

3) у Димы Кузьменко на сайте www.ibase.ru есть статья как поднять быстродействие за счет HDD. Т.е. для быстрой работы нужно иметь ТРИ HDD и клиент должен быть на отдельном компьютере

Мне удалось проверить его рекоментации, правда вставка записей была через isql.exe - быстродействие увеличилось в 6 раз по сравнению с расположением всех файлов на 1 винчестере

В тесте выполнялась вставка 600000 записей, при этом для каждой записи предварительно выполнялось 4 запроса и внутри триггера Insert еще 4 запроса и некоторая вычислительная работа. На все ушло 14 часов.

Для простых вставок как у тебя быстродействие увеличивается еще больше.
PM MAIL   Вверх
Alex
Дата 24.6.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Цитата(AZDesign @ 24.6.2005, 10:57)
в твоем примере происходит следующее :

Это вы про какой пример?


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
AZDesign
Дата 24.6.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.6.2005

Репутация: нет
Всего: нет



А тот который TestFB.rar
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  n, k: Integer;
  s: String;
begin
  IBDatabase1.Open;
  IBTransaction1.StartTransaction;
  try
    for n:= 1 to 10000 do begin
      s:= 'INSERT INTO NEW_TABLE VALUES(' + IntToStr(n);
      for k:= 1 to 9 do begin
        s:= Format('%s,%s', [s, QuotedStr(StringOfChar('F', 20))]);
      end;
      s:= s + ')';
      IBQuery1.Close;
      IBQuery1.SQL.Text:= s;
      IBQuery1.ExecSQL;
    end;
    IBTransaction1.Commit;
    ShowMessage('Ok');
  except
    IBTransaction1.Rollback;
  end;
end;


Или я это сам придумал
PM MAIL   Вверх
Alex
Дата 24.6.2005, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



AZDesign, и где я добавляю одну запись и закрываю соединение? Если вы все же посмотрите код, то увидите, что commit я делаю, только после добавления всех записей


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Владимр
Дата 15.9.2005, 02:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Для массовой заливке надо использовать IBSQL или его аналоги, не связанные со средствами визуализации.
Всю вставку в 1 транзакции. Вчера мерял - вставка 1м записей 115 секунд.Компоненты IBX
850MHz,128MB/
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.1021 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.