2 Introduction
NOTE: The new database is not binary compatible to the previous implementation and the database must be transferred by using dbexport/dbimport.
Since then, the amount of data stored in Eloquence databases has grown tremendously. While a typical database in 1990 had a size of less then 100 MB, Elquence databases today reach sizes of 4 GB and above. In addition Eloquence databases are used in a network environment.
It became evident, that the previous Eloquence database architecture would not allow to cope with the request for operating on ever increasing amounts of online data. Therefore Eloquence A.06.00 includes a new database system.
The main objectives for the new implementation were:
The new Eloquence database now utilizes one process per database environment. This process controls and performs all database operations. This provides better performance, since less system resources are used (for the client processes), less inter-process synchronization is required and the database server process can use dedicated system resources allocated for it.
The new Eloquence database uses a layered architecture. The Diagram below shows the major database layers:
--------------------------------------- | Image | Catalog | (SQL) | API Layer --------------------------------------- | FixRec | VarRec | BTree | . . . | Record Layer --------------------------------------- | Node Management | Node Layer --------------------------------------- | Buffer Cache | Buffer Layer --------------------------------------- | Volume Management | Storage Layer ---------------------------------------
--------------------------------------------- | Storage Layer | | | --------------------------------------------- | | | ------------- ------------- ------------- | Volume #1 | | Volume #2 | | Volume #3 | | /mnt1/vol | | /mnt2/vol | | /mnt3/vol | | | | | | | ------------- ------------- -------------Each database volume contains a volume header, which describes the volume and its properties. It also has a block allocation map, which is used to locate available blocks in this volume. Below that are data blocks which can be allocated in groups for the various database objects.
A database environment can have up to 255 volumes, each volume up to 128 GB (this depends on the underlying operating system). A database volume can either be allocated with a fixed size or can grow by a specified amount when additional space is required. For example, you can have a volume which starts with a size of 100 MB, extends by 16 MB until it reaches a total size of 200 MB.
Each buffer cache page consists of a buffer header, holding status and link information for this page and the buffer memory, which holds the data from/for a disk location.
Buffer Header Buffer Memory ----------- ------------------ | Block | | Contents of | | #3 |----->| Block #3 | | | | | | | | | ----------- ------------------ ^ Database volume | ------------------------------------------------- | Block | Block | Block | Block | ... | Block | | #1 | #2 | #3 | #4 | | #n | -------------------------------------------------The buffer memory is either allocated on server startup. Modified pages are written back to the disc, when either additional buffer space is required or due to database consistency requirements.
------------- -------------- | Node |-->| Allocated | | | | Blocks | ------------- --------------Nodes are allocated dynamically, unlimited in number.
The following node types are currently available:
------------ -------------- ---------------- | Node |-->| Block list |--->| Allocated | ------------ -------------- | blocks | -------------- | | | Free list | | | -------------- ----------------
There is no ROOT file anymore and you can have any number of databases in a database environment. All database meta information is now stored in catalog tables in the database environment. Of course, this kind of information is protected against modifications via Eloquence application programs.
If you think of the old ROOT file as a collection of various information specific to a single database, then this will become obvious:
For example:
The new database is not limited to the Image API. While not included with Eloquence, another API such as SQL could be used to access the data simultaneously.
However database utilities such as SCHEMA, DBCREATE or DBUTIL are affected:
For example, the schema processor will no longer create a ROOT file, but it will send the database structural information to the database srever.
The new database is not binary compatible to the previous implementation and the database must be transferred by using dbexport/dbimport.
Eloquence version A.06.00 is able to access previous Eloquence databases by the usage of the eloqdb5 server.