Category | GOODS | POST++ | ShMem | FastDB | GigaBASE | PERST | DyBASE | Consus | MiniDB |
Languages |
C++, C#, Java |
C++ |
C++ |
C++, C, Delphi |
C++, C, Java, Perl, C#, PHP |
Java or C# |
Python, PHP, Ruby, Rebol |
Java |
C++ |
Concurrent access |
Clients at different network nodes |
Single process (mutual exclusion of process threads) |
Processes and threads within one computer |
Processes and threads within one computer, remote clients |
Threads within one process, remote clients |
Single process (mutual exclusion of process threads) |
Single process (mutual exclusion of process threads) |
Threads within one process, remote clients |
Not allowed |
Transactions |
Local and global transactions based on local REDO log and global history log |
UNDO log |
- |
log-less atomic update mechanism with zero recovery time |
log-less atomic update mechanism with zero recovery time |
log-less atomic update mechanism with zero recovery time |
log-less atomic update mechanism with zero recovery time |
log-less atomic update mechanism with zero recovery time |
UNDO log |
---|
Locking |
object level shared and exclusive locks |
database critical section |
storage shared and exclusive locks |
database shared and exclusive locks: multiple-readers-single-write model, concurrent read and update |
database shared and exclusive locks: multiple-readers-single-write model |
concurrent access support, shared and exclusive object locks |
concurrent access support, shared and exclusive object locks |
database shared and exclusive locks: multiple-readers-single-write model |
not supported |
Access to persistent data |
transparent access using smart pointers for C++, byte code preprocessor for Java and remoting API for C# |
transparent access by normal C pointers |
transparent access by normal C pointers |
access through cursors |
access through cursors |
semitransparent access using normal references |
semitransparent access using normal references |
access through cursors |
access through smart pointers or ()/[] operators |
Access to database file |
page pool |
virtual memory |
virtual memory |
virtual memory |
page pool |
page pool + object cache |
page pool + object cache |
page pool + object cache |
page pool + object cache |
Supported containers |
B*-tree, R-tree, set, hash table, H-tree |
AVL-tree, R-tree, T-tree, hash table |
queue |
T-tree, extensible hash table, GiST, time seriers |
B+tree, R-Tree, GiST, time seriers |
B+tree, R-Tree, one-to-many relations |
B+tree, arrays |
B+tree |
extensible hash table |
memory deallocation |
garbage collection |
explicit or implicit(GC) |
explicit |
explicit |
explicit |
explicit or implicit(GC) |
explicit or implicit(GC) |
explicit or implicit(GC) |
explicit |
Query language |
- |
- |
- |
+ |
+ |
+ |
- |
+ |
- |
Scheme evaluation support |
+ |
- |
- |
+ |
+ |
+ |
+ |
+ |
- |
Client-server architecture |
+ |
- |
- |
(+) |
(+) |
- |
- |
+ |
- |
Replication support |
+ |
- |
- |
+ |
+ |
+ |
- |
- |
- |
Portable database file format |
+ |
- |
- |
- |
- |
+ |
- |
+ |
- |
Where to be used |
distributed systems with client-server architecture |
storage of persistent objects, personal database, snapshots |
interprocess communication |
realtime and performance critical applications |
application requiring fast index/reference access to the data (WWW database server for example) |
storage of persistent objects
| storage of persistent objects
| Java applications working with databases through JDBC interface
| small and portable embedded database engine |
I have three products GigaBASE, PERST and DyBASE build on the same core.
GigaBASE is implemented in C++ and its main API is for C++ API.
It also provides CLI APIs for C, Java, PHP, C# and Perl.
PERST has two implementations: in Java and C-Sharp and them provide API to the correspondent
languages. DyBASE mostly reuses GigaBASE implementation and provides API to the
languages with dynamic type checking: Python, Ruby, PHP and Rebol.
Also I include port of TestIndex.java for commercial OODBMS ObjectStore PSE Pro.
I run the same simple test implemented in C++, Java, C-Sharp, PHP, Python, Ruby and Rebol.
This test contains three steps:
Time of each step exceution is measured. Number of records in each case is the same - 100000.
Page pool size in all cases is 32Mb, which is enough to hold all records in memory.
All test were executed at the same computer: AMD Athlon 1.3G, 512Mb RAM, WinXP.
I am using MS Visual.NET 2003 C++ compiler, Java JDK 1.4, Python 2.3.2, PHP 4.3., Ruby 1.8.0 and Rebol/View 1.2.10.3.1.
I divide time of each step by number of iteration and produce the following results: