Back to Activex Controls for Btrieve.

The following benchmark information was derived from an adaptation of the
Visual Basic database benchmark model developed by Steve Jackson for his
article "Clocking Data Access," which ran in the May 1996 issue of
Visual Basic Programmer's Journal (Vol. 6, No. 6).
- Workstation: Dell Optiplex 4100/L, 486 100Mhz, 16Mb
- Programming Language: Microsoft Visual Basic 4.0
- Operating System: Microsoft Windows 95
- Network: SMC Ethernet (ThinNet)
- Network Server: Generic PC, 486 100Mhz, 32Mb
- Network OS: Novell NetWare 4.1
- Database: Btrieve 6.15 for NetWare - Server Edition
The database used for these tests was also adapted from Jackson's
model. It consisted of the following files:
| Table: |
Customer |
| Records: |
100,000 |
| Primary Key: |
CustID |
| Fields: |
CustID |
String |
10 |
| |
LastName |
String |
20 |
| |
FirstName |
String |
20 |
| |
State |
String |
2 |
| |
LastOrderDate |
String |
10 |
| |
TimesOrderPlaced |
Long |
4 |
| Table: |
OrderEntry |
| Records: |
5,000 |
| Primary Key: |
OrderID |
| Foreign Key: |
CustID |
| Fields: |
OrderID |
String |
10 |
| |
CustID |
String |
10 |
| |
OrderDate |
String |
10 |
| |
ShipDate |
String |
10 |
| |
OrderYear |
String |
2 |
| |
OrderMonth |
String |
2 |
| Table: |
Product |
| Records: |
1,000 |
| Primary Key: |
ProductID |
| Fields: |
ProductID |
String |
10 |
| |
ProductName |
String |
40 |
| |
ProductCode |
String |
10 |
| |
QtyOnHand |
Long |
4 |
| Table: |
ProductCode |
| Records: |
200 |
| Primary Key: |
ProductCode |
| Fields: |
ProductCode |
String |
10 |
| |
ProductDescription |
String |
30 |
The tests used different data access methods to produce the same result,
timing operations typically performed on a database by an application.
Select row by index 20 times returned 20 records out of the
Customer table using random seek values for the primary key.
Select all rows in a small table Returned all rows in the
ProductCode table (200 records) sequentially.
Search for a non-indexed value Scanned the entire Product table
(1000 records) and returned six rows from that table with the specified value
in the ProductCode field.
Select and update 20 rows Selected 20 rows from the Customer table
using random seek values for the primary key, and updated values of the
LastOrderDate and TimesOrderPlaced fields.
Insert 20 rows Added 20 rows to the Customer table
using random values for the primary key.
Delete 20 rows Selected 20 rows from the Customer table
using the values for the primary key added in the preceeding Insert test,
and deleted them.
Two table join Selected one row from the Customer table and
18 rows from the OrderEntry table joined to the Customer table by CustID.
The tables below list the results of each of the individual timed
tests against the sample database, using each of the database access methods
tested. The 32-bit test suite was run using Microsoft Visual Basic 4.0
32-bit edition.
The Btrieve direct API tests were included in the 32-bit test suite
to provide a basis for comparison with ActiveX Controls running in single-record
access mode, even though problems with the internal Unicode storage used by
VB4/32 for user-defined type data rendered the numeric fields returned by
the Btrieve API calls unusable in VB4.
Jet DAO access to Btrieve in VB4 32-bit is limited to ODBC data sources,
so we used the ODBC Interface for Btrieve from Pervasive Software to run the
32-bit DAO tests. We also included a test using direct calls to the ODBC
interface as a basis for comparison.
| 32-bit Tests |
Smithware ActiveX Controls |
Smithware ActiveX (Extended Ops Mode) |
Btrieve direct API |
DAO SQL Passthru (ODBC) |
Jet MDB Query (ODBC) |
ODBC API |
| Select row by index 20 times |
0.117 |
0.117 |
0.094 |
2.160 |
8.420 |
2.127 |
| Select all rows in a small table |
0.723 |
0.306 |
0.635 |
1.605 |
1.766 |
1.458 |
| Search for a non-indexed value |
3.282 |
0.158 |
3.128 |
0.177 |
0.802 |
0.187 |
| Select and update 20 rows |
0.250 |
0.247 |
0.172 |
7.846 |
15.529 |
7.639 |
| Insert 20 rows |
0.121 |
0.123 |
0.098 |
6.381 |
7.440 |
6.291 |
| Delete 20 rows |
0.148 |
0.146 |
0.155 |
6.635 |
17.338 |
6.634 |
| Two-table join |
0.220 |
0.053 |
0.078 |
0.410 |
1.548 |
0.334 |
| TOTAL TIME |
4.861 |
1.150 |
4.360 |
25.214 |
52.843 |
24.670 |
The 16-bit test suite was run using Microsoft Visual Basic 4.0
16-bit edition.
The code used by the tests was the same as for the 32-bit suite, except
that since VB4/16 has a native Jet DAO interface for Btrieve, we used this
method instead of an ODBC data source for the Jet DAO tests.
We also included VBX Controls for Btrieve in the 16-bit test suite since
the 16-bit version of Visual Basic 4.0 still supports VBX controls. The
VBX tests did not use the Smithware Extended Operations VBX control, and were
limited to single-record operations.
| 16-bit Tests |
Smithware ActiveX Controls |
Smithware ActiveX (Extended Ops Mode) |
Smithware VBX Controls |
Btrieve direct API |
Jet DAO (Btrieve) |
Jet MDB Query (Btrieve) |
| Select row by index 20 times |
0.136 |
0.134 |
0.340 |
0.086 |
6.784 |
6.173 |
| Select all rows in a small table |
0.836 |
0.249 |
2.611 |
0.530 |
1.620 |
1.550 |
| Search for a non-indexed value |
3.763 |
0.055 |
10.902 |
2.670 |
6.370 |
5.989 |
| Select and update 20 rows |
0.261 |
0.263 |
0.553 |
0.153 |
7.515 |
6.848 |
| Insert 20 rows |
0.141 |
0.143 |
0.281 |
0.088 |
4.855 |
0.323 |
| Delete 20 rows |
0.155 |
0.156 |
0.331 |
0.135 |
6.473 |
6.867 |
| Two-table join |
0.146 |
0.064 |
0.501 |
0.067 |
1.537 |
0.938 |
| TOTAL TIME |
5.438 |
1.064 |
15.519 |
3.729 |
35.154 |
28.688 |
If you would be interested in trying to reproduce our results or in looking
more closely at the test methods, you can download the benchmark project source code
and sample data below. The project source code includes source and project files only,
no additional VBX, OCX, or DLL files.
The sample data is compressed using PKZIP 2.04. Uncompressed it requires about 10Mb.
The project files are also zipped.
Back to Activex Controls for Btrieve.
|