Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2010, 21:58   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Скорость работы различных СУБД

Сегодня от безделья решил проверить несколько наиболее популярных СУБД на скорость работы с большим (относительно) объемом данных.
Хочу поделиться результатами (может кому-нибудь интересно).
Итак, Computer: CPU Athlon(tm)64 X2Dual 6000+, RAM 2 гб.

В тесте принимают участие:
ADO (Microsoft.Jet.OLEDB.4.0)
Paradox (Paradox 7)
dBase (dBase for Windows)
MySQL (v.5.0.45)
AbsoluteDB (v.6.0)
VolgaDB (v.5.17)
Accuraser (v.4.02)

Все таблицы имеют поля:
ai - Autoincrement
aNum - Integer
aSum - Integer
aText - String (или Varchar) 250 символов

У всех таблиц все свойства по умолчанию (за исключением TableName, Database...)
Стоит отметить, что VolgaDB по сути работает с таблицами в памяти (т.е. CachedUpdates:= True; ). Это нечестно по отношению к другим. Поэтому проверим ее и c работой в памяти (Post внутри цикла, ApplyUpdates после цикла), с со сбросом кеша на диск (ApplyUpdates внутри цикла).

На форме связка DBGridEh (пусть тормозит работу) > DataSourse > DataSet (сама таблица), одна кнопка, один Label и ProgressBar.

Добавим в таблицы по 20 тысяч записей с выполнением простейшего агрегатного запроса:
Код:
var i: Integer;
  h, n, s, ms: Word;
  t1, t2: TTime;
begin
  ProgressBar1.Max := 20000;
  t1 := Time;
  for i := 0 to 20000 do
  begin
    Application.ProcessMessages;
    Query.Close;
    Query.SQL.Clear;
    Query.SQL.Add('select sum(aNum) from Tablename');
    Query.Open;

    Table.Insert;
    Table.FieldByName('aNum').AsInteger := i;
    Table.FieldByName('aSum').AsInteger := Query.Fields[0].AsInteger;
    Table.FieldByName('aText').AsString := 'Text ' + inttostr(i);
    Table.Post;
    ProgressBar1.Position := i;
  end;
  t2 := Time;
  DecodeTime(t2 - t1, h, n, s, ms);
  label1.Caption := IntToStr(n) + ':' + IntToStr(s);
  ProgressBar1.Position := 0;
end;
Результаты:

VolgaDB (ApplyUpdates после цикла) - 0:26 (размер БД 496 Kb !!!)
MySQL - 1:44 (размер БД 758 Kb !!!)
dBase - 3:22 (размер БД 5,4 Mb)
Paradox - 4:15 (размер БД 5,58 Mb)
ADO - 6:25 (размер БД 1.6 Mb)
VolgaDB (ApplyUpdates внутри цикла) - 14:19 (размер БД 496 Kb !!!)
AbsoluteDB - 22:50 (размер БД 6,1 Mb)
Accuraser - Надоело ждать, отключил процесс .

Некоторые СУБД (особенно AbsoluteDB, Accuraser) первые тысяч пять записей добавляют быстро, потом "тормоза" начинаются в геометрической прогрессии.

Резуме: MySQL Forever !!!???
С Ораклами и Постригами не работаю, поэтому не проверял.

Последний раз редактировалось _SERGEYX_; 09.10.2010 в 22:05.
_SERGEYX_ вне форума Ответить с цитированием
Старый 09.10.2010, 22:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Неправильно ты проверял.
Ты проверял не СУБД а действия их провайдеров, а они искажают всю картину.
У меня тоже такое часто что набрав в консоли СУБД запрос, он отработает одно время, а когда в Делфи его открываю совсем другое - провайдеры могут кой-чего скушать с секундах.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2010, 01:04   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

с одной стороны, согласен со Стилет-ом - можно было слабать типа ХП для каждой субд и через нее проверить
но с другой стороны, данные вводят юзверя руками через эти самые провайдеры на клиенте, но конечно же не со скоростью 20 тыс. айтемов/сек. - и опять же "но" - в несколько потоков и такое реально
так что - я за адвансед_тест - запускаем пару десятков копий прилады и по таймеру стартуем заливку данных, а еще лучше чтобы заливающие клиенты были не на этом же компе, а общались по сети
soleil@mmc вне форума Ответить с цитированием
Старый 10.10.2010, 11:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а еще лучше чтобы заливающие клиенты были не на этом же компе, а общались по сети
О! Верно.
Ксати - ADO (Microsoft.Jet.OLEDB.4.0)
Ошибка. ADO это не база данным микрососов а технология. Я бы уж писал
Access (Microsoft.Jet.OLEDB.4.0)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скорость работы программы Farrel Общие вопросы C/C++ 0 10.09.2010 23:25
Delphi: наивысшая скорость работы с матрицей ex.cluz Общие вопросы Delphi 5 31.05.2010 16:52
зависит ли скорость работы макроса от порядка условий? kievlyanin Microsoft Office Excel 9 29.05.2009 12:30
Вопросы о оптимизации работы с СУБД Stilet БД в Delphi 8 21.07.2008 11:29
как создать субд в Delphi для работы с MySqL Savl БД в Delphi 1 12.03.2008 14:10