My Stuff
Downloads & Tools
Documentation
Extensions
Licenses
Support
Documentation Home
These pages provide a detailed explanation of how developers can implement products using InMem0r8 Core .
These initial pages offer a ‘crash course’ for developers wishing to get up to speed in the shortest possible timescale. The remaining sections provide more detailed reference information outlining the internals of InMem0r8, related constructs, and details of the functional interface.
For developers needing more fine grain control over implementation that wish to wrap their own transactional data solution then a separate document exists covering the InMem0r8 Atomics library, which has a variety of different conventional and transactional memory allocator overrides along with a range of higher level supporting object templates.
Key InMem0r8 Features
InMem0r8 is a complete and minimalistic refresh of transactional database design that dispenses with legacy memory models and concurrency architectures. InMem0r8 is unique in that it is built from the ground up using proprietary and patent protected memory allocators that simultaneously allocate both main memory and backing storage in a single instruction call.
The end result is a database technology that is massively simpler, faster and more energy efficient than any other transactional database. By embracing industry proven algorithms and the true capabilities of modern hardware, it pushes everything possible to the limit, offering the world a genuinely modern alternative to the existing status quo.
The low latency performance of InMem0r8 stems from operating extremely close to the boundaries of maximal efficiency, which implicitly guarantees optimal energy draw, so the company mission isn’t just an exposition of deep tech, but also something of a moral imperative in order to put the product at the very heart of all new and existing systems that touch data.
Here are just a few of the advantages that InMem0r8 deployments enjoy:
- Cost. InMem0r8 Core is free in most instances, for databases up to 4GB. It can be used by employees, hobbyists, end users and professional developers for a wide range of applications including internal products and tools within commercial companies or organizations. The major restrictions are for databases over 4GB or is if it is sold either on its own or as part of a larger software product.
- Resilience. InMem0r8 Core allows multiple, up to the millisecond, ‘live’ copies of a database to be kept on multiple machines in real-time. A complete failure of a master node can be recovered and processing continued within seconds without data loss.
- Simpler. A typical application using InMem0r8 Cor Core e needs only 4 interface calls, which are ‘Delete()’, ‘FindKeysByTags()’, ‘Read()’ and ‘Write()’, in addition to calls to open and close the database and begin and end transactions. This simplicity means that developers can be up and running with a database instance in a matter of minutes, once the core principles of operation are understood.
- Performance. InMem0r8 based solutions often complete transactions in ‘microseconds’ not ‘milliseconds meaning that it’s not uncommon for it to be orders of magnitude faster than other database technologies.
- Security. InMem0r8 Core supports concurrent and multi-level security from unencrypted data all the way up to military grade security. As tags are stored adjoint to the data itself, it allows information to be selected and returned from the database without the need for decryption, meaning that key management issues can be safely deferred to the calling client.
- Set Operations. InMem0r8 supports complex set operations across an entire database, to allow the required information to be selected simply from tag information using simple expression such as ‘(((Employee | Customer) & (Completed)) ! (Returned))’) as an example.
- ACID Compliance. InMem0r8 Core is an ACID compliant transactional database. A double write mechanism guarantees that transactions will fully commit or roll-back in the event of error.
- Whole Database Searches. InMem0r8 Core allows queries to make use of reverse indices to achieve incredibly fast lookups across the entire database. Any information can be indexed at multiple levels such as: database wide, across multiple tables or within a single/group table.
- Zero Ongoing Data Maintenance. Indexes are created or added to at write time, meaning that all subsequent queries are constantly optimal without the need for ongoing data administration support as data volumes grow.
- Wildcards. InMem0r8 Core supports enhanced wildcard searches that return in milliseconds and can embrace many more wildcard permutations than are permissible in traditional SQL.
InMem0r8 Core Crash Course
This section will enable developers to get up to speed quickly with basic use of the database. We will do this by making use of small examples focused on creating databases and performing standard operations such as, writing, finding and reading data. Several important areas of the product are passed over in this section, but references to fuller explanations are provided at multiple points, for anyone developers interested in fuller explanations of these topics.
The entire interface for InMem0r8 Core consists of 11 functions, which will be outlined below:
Complete API specification for InMem0r8 Core
Create Database
| Signature | int CreateDatabase | |
|---|---|---|
| Param Type | Param Name | Param Description |
| void * | Handle | If the database is created successfully then a reference will be appended to this pointer. |
| char * | FileName | The unique name of the database instance. |
| USB_ENCRYPTION_FUNCTION | Function | An optional callback function for the provision of user defined encryption. |
| void * | UserValue | An optional set of additional user defined parameters. |
Create Database Example
#include <stdio.h>
#include "RockallUDB.h"
int main()
{
void *Handle;
if ( CreateDatabase( & Handle,"Test.DB",NULL,NULL ) == 0 )
{ CloseDatabase( Handle ); }
else
{ printf( "Unable to create a new database or database already exists\n" ); }
}
using System;
using System.Runtime.InteropServices;
namespace InMem0r8
{
internal class Program
{
[DllImport("Rockall_UDB_DLL.dll")]
internal static extern int CreateDatabase(ref Int64 database, [MarshalAs(UnmanagedType.LPStr)] string fileName,
int EncryptionFunction, int UserValue, int maxSpace, int maxTime, bool verifyValues);
[DllImport("Rockall_UDB_DLL.dll")]
internal static extern int CloseDatabase(Int64 hwd);
public static extern int CreateDatabase(int hwd);
static void Main(string[] args)
{
Int64 Handle = 0;
if(CreateDatabase(ref Handle,"Test.DB", 0, 0, 75, 300, true) ==0)
{
CloseDatabase(Handle);
}
else
{
Console.WriteLine("Unable to create a new database or database already exists\n");
}
}
}
}
Open Database
| Interface | Create Database | |
|---|---|---|
| Signature | int CreateDatabase | |
| Param Type | Param Name | Param Description |
| void * | Handle | If the database is created successfully then a reference will be appended to this pointer. |
| char * | FileName | The unique name of the database instance. |
| USB_ENCRYPTION_FUNCTION | Function | An optional callback function for the provision of user defined encryption. |
| void * | UserValue | An optional set of additional user defined parameters. |
Theme Customizer
Customize your theme
Theme variation