1 |
writing performance test: |
2 |
|
3 |
copying the 58970 records of unesb (~ 500 byte each) |
4 |
with simple full index (-idxall) |
5 |
making one entry for every field (total of 585334 fields) |
6 |
|
7 |
system: |
8 |
$ |
9 |
cat /proc/cpuinfo |
10 |
... |
11 |
model name : Pentium III (Coppermine) |
12 |
cpu MHz : 801.832 |
13 |
cache size : 256 KB |
14 |
|
15 |
free |
16 |
total used free shared buffers cached |
17 |
Mem: 256252 150428 105824 0 640 70560 |
18 |
-/+ buffers/cache: 79228 177024 |
19 |
Swap: 265032 7668 257364 |
20 |
$ |
21 |
|
22 |
initial write to non existing db db/test/t, |
23 |
creating a 30MB .mst and 18MB .oxi |
24 |
$ |
25 |
time ./openisis -db db/unesb/unesb -append db/test/t -fmt mfn -idxall >/dev/null |
26 |
|
27 |
real 0m20.304s |
28 |
user 0m15.680s |
29 |
sys 0m3.600s |
30 |
|
31 |
./openisis -db db/test/t -fmt mfn | wc -l |
32 |
58970 |
33 |
./openisis -db db/test/t -ifdump | wc -l |
34 |
585334 |
35 |
$ |
36 |
|
37 |
that is about 2,900 rows + 29,000 index entries per second. |
38 |
(without indexing, it writes nearly 15,000 rows a second). |
39 |
|
40 |
successive append are substantially slower, as IO cache is exhausted. |
41 |
|
42 |
|
43 |
* the never reading system |
44 |
|
45 |
On a 650 MHz system with *lots* of cache memory |
46 |
(it actually *never* reads a block), |
47 |
a test of five successive appends yields pretty much constants times |
48 |
around 29 seconds per pass (~ 2,000 rows + 20,000 entries / sec), |
49 |
although the .mst stacks up to 294850 records and the index then has |
50 |
2926670 entries. |
51 |
|
52 |
That same system does on that fat db |
53 |
one million random reads in 10 seconds (~ rows 100,000 / sec) |
54 |
and an ifchk (252465 keys in 50596 blks of 1K depth 4) in 5.18 secs, |
55 |
accessing 48,738 per second. |
56 |
|
57 |
|
58 |
* dual CPU use |
59 |
|
60 |
Using both CPUs of this box, |
61 |
four parallel writers (copying unesb to four different targets) |
62 |
take a total of 60 seconds, giving a combined throughput of |
63 |
more than 3,900 rows + 39,000 index entries / sec. |
64 |
|
65 |
|
66 |
* comparision |
67 |
|
68 |
While these numbers are all derived with single threaded debugging code, |
69 |
they yet outperform the (more or less) "relational" databases |
70 |
by one or even two orders of magnitude. |
71 |
|
72 |
For example, MySQL tested 350768 inserts without key in in 619*0.62 seconds, |
73 |
yielding 914 rows/sec as compared 15,000 with OpenIsis. |
74 |
Insert with key (one, probably) did less than 35 rows per second, |
75 |
compared to around 3,000 (with ten keys each). |
76 |
Select (probably reading all rows) did 20,000 in 39*0.54 seconds, |
77 |
that is 950 per second -- compared to 100,000 with OpenIsis. |
78 |
|
79 |
I couldn't figure out what kind of system was used for these |
80 |
> http://www.mysql.com/information/benchmark-results/result-db2,informix,ms-sql,mysql,solid,sybase-relative.html MySQL benchmarks, |
81 |
however, it probably was not much less than our 800 MHz Pentium. |
82 |
Most other databases are even slower, and that, by the way, |
83 |
is also our experience when working with Oracle and the like. |