Raima Corporation, established in Renton, Washington in 1982, started working on the db_Vista product, envisioning a high performance, zero administration embedded database. db_Vista was first released in 1984, and by 1988 its third major release was out. It was later renamed to Raima Database Manager, or RDM.
The product grew in popularity, and in order to keep pace with the rising client-server architecture Raima released Velocis, a client-server version of RDM, in 1993. Velocis was later renamed RDM Server.
Raima was acquired by Centura Software Corporation in 1999. Centura Software decided to launch an open source version of RDM Embedded, called db.*, in 2000. Under Linux the db.* product was named db.linux. In 2001 Birdstep Technology ASA, a Norwegian based company, acquired the Raima assets and has since made 3 major releases of RDM Server.
The product offers various different data models. The network data model manages relationships between data objects through list of pointers called sets. The network model is defined to allow very flexible relationships between objects making it perfect to structuring complex data relationships. If you think of a hierarchical structure with parent-child relationships, the network model allows for the same structure except there is no limitation on the number of parents a child has nor how many children a certain parent has between objects. This allows for extremely efficient modeling of data graphs and data hierarchies. The relational data model manages relationships between data objects through value matching, and usually primary key/foreign keys. Relationships are limited to include two record types compared to the network model where no limitation is imposed. RDM Server allows for mixing both the network model and relational model in the same database definition giving the application vendor full flexibility.
RDM Server supports regular B-tree based indexes. An index can contain a single or multiple segments. In addition, it supports optional indexes where the application controls the index population.
The architecture is client-server, with the ability to run in a heterogeneous environment. The database server sub-system can be linked directly with an application, removing the need for client-server communication and operating system context switching, and allowing for high performing database operations.
Active and passive replication is also available, maintaining an identical copy of a master database for application failover. The sub-system implements an asynchronous single master multi slave replication engine based on its supporting client-server transports (including TCP/IP).
Databases can be disk resident, or memory resident. In the first case, all access to disk resident structures (both data or data index information), happens through an in-memory data cache maintained by the database server sub-system. Alternatively, the application can define database structures to reside in-memory. An application can also define a database with mixed disk based or memory resident data structures. The data definition language of the engine supports mixing different storage types for any data structure.
The ACID transaction model is used to ensure data integrity, and reliability, ensuring that the database image is always in a readable and non-corrupt state. However, the application can relax some of the properties to increase performance. Both table and row level locks are implemented, and can be controlled by the application to manage concurrent access to any database. Dirty-read isolation level is also supported.
The native C API is an extensive library functions for all database operations. Timestamps, concurrence control, transaction control, database configuration, data navigation, and data changes are supported. A native C administration API is an extensive library functions for all database administration operations such as login, backup, defragmentation, consistency checks etc. A SQL API is implemented as a SAG CLI interface giving access to the supported SQL92 standard. All these APIs are available as part of the client libraries or as part of the server libraries in application linked mode. Moreover, RDM Server has full support for ODBC v3.51, JDBC v3 and v4 through a Java type 4 implementation, ADO.Net and even PHP. RDM Server therefore supports C, C++, and JAVA applications.
RDM Server supports for the following native data types: signed and unsigned char; signed and unsigned int16; signed and unsigned int32; signed and unsigned int64; w_char_t (Unicode); float; double; DB_ADDR (Internal database address); BLOB (binary large objects); BCD (Binary Coded Decimal); date; time; timestamp. In addition it has native support for structs and multi-dimensional arrays based on the above list of base types.
It also supports the following SQL data types: char; varchar; long varchar; smallint; integer; bigint; wchar (Unicode); wvarchar; long wvarchar; float; double; real; decimal/numeric; date; time; timestamp; rowid; binary; varbianary; long varbinary; c_data (read access to native array and struct data types).
The product implements a fully ACID compliant transaction logging system with automatic recovery capability. An application vendor can hook into the transaction system and do its own real-time transaction logging for any purpose. This facility is also used for asynchronous replication.