Raima Database Manager (RDM) is a high-performance database management system that is optimized for workgroup, real-time and embedded, and mobile operating systems. It is ideal for programming interoperating systems of networked and distributed applications and data such as those found in financial, telecom, industrial automation or medical systems. Multiple APIs and configurations provide developers a wide variety of powerful programming options and functionality.
RDM is a fast, small-footprint, inexpensive database engine, provided by Raima as an SDK for Windows, Linux or UNIX development environments. For embedded and mobile targets, RDM’s Windows or Linux SDKs will perform cross-platform development.
Configurations include standalone single-thread and single-database, all the way to networked multi-computer, multi-process, multi-thread, distributed-database. See how you can assemble your own solution.
RDM supports multiple programming interfaces to provide developers with the level of control they need for the task at hand. The programming interfaces include:
- Navigational C API
- Cursor C API
- Custom C++ API
- SQL C API
- Standards Based ODBC C API
- Objective C API
- ODBC, JDBC, ADO.NET
The Standard and Proprietary APIs share a common set of data types which may be stored or read using any API.
- Integer—8, 16, 32, 64 bit, signed or unsigned.
- Character—single or string, fixed length, variable or large variable
- Wide Characters—single or string.
- Double, float.
- Date, Time, Timestamp.
- BCD—precision 32, scale 16 digits.
- GUID/UUID—128 bit representation.
- Binary—array or blob.
RDM gives the developer multiple options regarding how to model their data. The engine supports B+ Tree and hash indexing. In addition to the traditional relational index relationships RDM supports direct relationships through Network Model Sets. The combination of the relational indexing and network model sets allows for the development of highly efficient and powerful data models.
RDM allows the developer to choose what type of access to the data is offered. The database can be configured to allow
- Access to the data from only a single process
- Access to the data to all processes on a machine (using a shared memory transport)
- Access to the data from remote machines (using a TCP/IP transport)
Many embedded applications have little to no tolerance for downtime. As a shared resource, a database has the potential of being a single point of failure for these systems. To support higher availability RDM provides both mirroring and replication as a way to maintain a standby database ready to become active if/when the primary needs to go down.
Developers of applications with regulatory or business requirements to secure data can utilize the RDM encryption layer. RDM provides an implementation of the AES/Rijndael encryption cipher with support for 128, 192, and 256 bit keys. Using RDM’s encryption functionality you can ensure that your data is only accessible to authorized agents.
Multi-Version Concurrency Control (MVCC)
RDM uses a form of MVCC to implement read-only transactions. Think of it as a virtual snapshot of your embedded database that remains unchanged while it is being concurrently updated. Between statements that begin and end a read-only transaction, the virtual snapshot may be read without locks. Lockless reading benefits reading processes and writing processes because they don’t interfere with each other.
Most database applications function completely correctly with reports based on a snapshot view.
The RDM architecture allows for configurations that support parallel operations to increase data throughput. Modern operating systems and hardware rely on multiple computing cores. The RDM database system can take advantage of these cores to increase data throughput.
RDM allows the developer to open multiple identically structured databases and treat them as a single logical database. The developer can run queries across these unified databases without having to know or care which database is the origin for any particular result row. If a developer would like to know in which database instance a particular result row resides that information is readily available.