Porównanie metod dostępu do bazy InterBase

W niniejszym teście przeprowadzono pomiar czasu dostępu do danych zgromadzonych w bazie InterBase 6.0 firmy Borland. Przetestowano 7 metod dostępu do danych. Dwie spośród badanych metod wykorzystują standardowe komponenty bazodanowe Delphi oraz odpowiednie sterowniki ODBC. Cztery następne metody pozwalają na bezpośrednie połączenie z bazą danych. Ostatnia metoda wykorzystuje komponentu ADO wraz ze sterownikiem ODBC. Test objął zatem następujące metody dostępu.

Nazwa Skrót Opis
InterBase Express 5.03 IBX Komponenty bezpośredniego dostępu.
Free InterBase 2.11 FIB Darmowe komponenty bezpośredniego dostępu.
InterBase Objects 3.5 Ag IBO 1 Rozbudowane komponenty bezpośredniego dostępu. Wykorzystano IBODatabase.
InterBase Objects 3.5 Ag IBO 2 Rozbudowane komponenty bezpośredniego dostępu. Wykorzystano IB_Connection.
Gemini ODBC Driver 2.0 Gemini Sterownik ODBC firmy Gemini.
EasySoft ODBC Driver 1.0 Easy Sterownik ODBC firmy EasySoft.
ActiveX Data Objects D5 ADO Komponenty ADO w połączeniu ze sterownikiem ODBC firmy Gemini.

Test jest uproszczony i obejmuje jedynie wykonywanie zapytań SELECT. Wykorzystano do tego celu komponenty typu Query otwierane w trybie ReadOnly lub UniDirectional.

Test wykonano na bazie danych składającej się z 3 tabel zawierających po jednym polu odpowiednio typu CHAR, VARCHAR i INTEGER. Dodatkowo baza zawiera 2 tabele połączone binarną relacją. Każda z tabel zawiera losowe dane zawarte w 100.000 rekordów wypełnionych w różnym stopniu. Baza zajęła 52MB.

Bazy otwierane są w dialekcie 3 SQL'a z wyłączonym buforowaniem. Wykonywane zapytania pobierają wszystkie rekordy z tabeli za pomocą metod FetchAll bądź pochodnych.

Nr Zapytanie
1. select NUMBER from NUMBER
2. select NUMBER from NUMBER order by NUMBER
3. select TEXT from STATICTEXT
4. select TEXT from STATICTEXT order by TEXT
5. select TEXT from DYNAMICTEXT
6. select TEXT from DYNAMICTEXT order by TEXT
7. select DATA.TEXT, DATA.NUMBER, SUBDATA.TEXT from DATA join SUBDATA on SUBDATA.IDENTIFIER = DATA.IDENTIFIER
8. select * from DATA order by IDENTIFIER, TEXT desc

Maszyna testowa to Athlon XP 1700 MHz, 256 MB DDR 266 MHz RAM, HDD Barracuda IV. Dla każdej z metod i każdego z zapytań przeprowadzono 3 pomiary (T1, T2, T3) uśredniając je. Wszystkie czasy podano w sekundach. Pierwszy pomiar nie był brany pod uwagę ponieważ znacznie różnił się on od pozostałych. Wynika to z faktu, iż powtórnie dane odczytywane są już z cachu dysku.

SQL

IBX

FIB

IBO 1

IBO 2

Easy ODBC

Gemini ODBC

ADO

T1

T2

T3

TŚR

T1

T2

T3

TŚR

T1

T2

T3

TŚR

T1

T2

T3

TŚR

T1

T2

T3

TŚR

T1

T2

T3

TŚR

T1

T2

T3

TŚR

1

0,94

0,92

0,92

0,93

0,88

0,84

0,84

0,85

1,14

1,09

1,11

1,11

1,08

1,16

1,14

1,13

0,91

0,91

0,91

0,91

0,91

0,91

0,91

0,91

1,13

1,14

1,13

1,13

2

1,11

1,13

1,13

1,12

1,03

1,05

1,03

1,04

1,28

1,28

1,28

1,28

1,30

1,34

1,33

1,32

1,09

1,09

1,09

1,09

1,11

1,09

1,09

1,10

1,33

1,33

1,34

1,33

3

1,16

1,16

1,16

1,16

1,09

1,08

1,09

1,09

1,36

1,34

1,34

1,35

1,34

1,34

1,34

1,34

1,19

1,25

1,24

1,23

1,26

1,27

1,27

1,27

1,42

1,44

1,44

1,43

4

2,22

2,30

2,19

2,24

2,11

2,11

2,11

2,11

2,42

2,42

2,44

2,43

2,41

2,41

2,39

2,40

2,25

2,41

2,28

2,31

2,31

2,31

2,31

2,31

2,50

2,48

2,50

2,49

5

1,16

1,16

1,17

1,16

1,08

1,08

1,08

1,08

1,36

1,36

1,36

1,36

1,34

1,36

1,36

1,35

1,20

1,25

1,25

1,23

1,27

1,27

1,28

1,27

1,48

1,47

1,47

1,47

6

2,36

2,23

2,24

2,28

2,16

2,17

2,30

2,21

2,44

2,50

2,45

2,46

2,44

2,42

2,42

2,43

2,30

2,34

2,34

2,33

2,38

2,38

2,38

2,38

2,58

2,58

2,56

2,57

7

3,66

3,66

3,66

3,66

3,50

3,50

3,50

3,50

8,39

8,38

8,38

8,38

8,42

8,42

8,45

8,43

3,61

3,64

3,61

3,62

3,64

3,64

3,64

3,64

3,95

3,94

3,94

3,94

8

1,86

1,30

1,84

1,67

1,66

1,67

1,67

1,67

1,83

1,78

1,78

1,80

1,80

1,81

1,81

1,81

1,75

1,77

1,77

1,76

1,76

1,77

1,77

1,77

2,11

2,09

2,09

2,10

 

 

 

 

14,21

 

 

 

13,54

 

 

 

20,17

 

 

 

20,21

 

 

 

14,48

 

 

 

14,64

 

 

 

16,48

Niniejsze wyniki wskazują, iż najszybsze są komponenty FIB. Są one darmowe ale niestety wielce ubogie. Na drugim miejscu uplasowały się bardzo dobre komponenty IBX. Zaskakująco dobre wyniki dają metody połączeń pośrednich przy pomocy odpowiednich sterowników. Oba sterowniki ODBC uzyskały podobne rezultaty. Na dalszym miejscu znalazło się ADO, które należy przypomnieć do połączenia wykorzystuje Gemini ODBC. Najwolniejsze okazały się komponenty IBO. Należy jednak przyznać, iż są one bardzo rozbudowane dając programiście o wiele większe możliwości niż np. IBX. Warto w tym miejscu zauważyć, że wyniki IBO nie różnią się znacząco w przypadku poszczególnych zapytań. Jedynie złożone zapytanie numer 7 łączące wyniki z obu tabel obsługiwane jest ponad dwukrotnie dłużej. Jednocześnie należy podkreślić, iż tylko komponenty IBO 2 pokazały stosowne okno informujące postępie w pobieraniu kolejnych rekordów. Dzieje się tak tylko w przypadku wykrycia, iż operacja potrwa dłużej niż 2-3 sekundy.

UWAGA! Niniejszy test nie jest obiektywny. Być może wyniki operacji typu INSERT lub UPDATE dają zupełnie inne wyniki niż bardziej lub mniej skomplikowane SELECT. Dodatkowo nie mam pewności, czy wszystkie użyte metody pracowały w tych samych warunkach