MicroStream

Java-Native High-Performance Persistence

Store any Java Object Graph Natively, Relieved of Heavy-weight JPA.
Microsecond Response Time. Ultra-High Throughput. Minimum of Latencies.
Create Ultra-Fast In-Memory Database Applications & Microservices.


Getting Started Getting Started

What's the Problem
with Data Storage
in Java today?


Java processes data in the form of object graphs in RAM. In contrast, relational databases store data in tables. Storing complex Java object graphs in tables isn't possible (impedance mismatch). Conversely, neither database nor cache returns Java objects. This problem was solved by object-relational mapping (ORM), which means all data are converted behind the scenes twice through every single read and write. Therefore, ORM is ineffective, leads to enormous performance losses, and creates its own set of issues.



Performance Issues

JPA queries require processing-intensive data conversions that reduce performance. When using in-memory data cache, data conversions can consume 90% of JPA queries time and effort.

Incompatible Philosophies

Java: OOP, classes, methods, inheritance, only 8 data types, type safety, clean code, POJOs. Database systems: tables & relations, stored procedures, stored functions, PL/SQL, SQL, views, up to 50 data types.

Inconvenient Development

To make ORM work, developers need to be experienced, must work with different data structures and models and adapt Java entity classes. Not to mention they still won't eliminate performance issues or the high cost of development.

NoSQL: Same Challenges

NoSQL databases use different data structures, like JSON documents, column- oriented, graphs, and key-value store. They are all also incompatible with real Java object graphs and require performance- reducing data conversions.

Huge Infrastructure

To get acceptable performance out, an infrastructure is required that is complex, highly scalable, and effortful to maintain. Scaling is a great feature, but keep in mind that your costs will equally scale high.

Inefficiency and Expensive

Every 100ms of delay in searches reduce customer experience, increase bounce rates, drop traffic in potential customers, hurt your conversion rates, and finally cost you a certain percentage in sales and market share.

Why MicroStream?


MicroStream replaces JPA and streams your Java object graphs directly into Oracle and MySQL NoSQL database, Oracle Coherence distributed cache or Oracle Cloud Object Store. No more incompatible database data structure. No more mappings. No more data conversion. No waste of computing time. No network bottlenecks. No latencies. Ultra-fast. Game-changer concept that provides you fantastic benefits.



Ultra-fast

Every query executed in-memory in microseconds - up to 1000 times faster than JPA queries, up to 100 times faster than direct cache access. No magic, but simply core Java concepts and unleashed pure JVM power.


Build for Java

No more database data model. Java classes only. No more mappings. No more query language. Pure Java only. High-quality Java API. From Java developers especially for Java developers. Feels like from core Java.


Saving Money

With MicroStream only one machine is as powerful as an entire conventional database cluster that uses JPA. With MicroStream you will save up to 92% costs of infrastructure, on-premise and in the cloud.


How to benefit from Performance?

Compress the Power of an

entire Database Cluster ...

... to only

1 single
Java
Machine!

Save up to ...

92%

Computing Time, Energy, CO2 and

Costs in the Data Center per Year!


How does it work?

Java Object Graphs are
predestined to be used for
In-Memory Databases.

Java Object Graph -
Perfect Multi Model
Data Structure

Java provides the perfect data structure that is suited and used for every use-case. With an object graph, you can build up a highly complex data structure but allows you to store simple lists as well. Any node can be anything, a plain object, but also any collection or bitmap. All Java types are supported. It is by nature a multi-model data structure. You can have millions of nodes and thousands of subgraphs as well as only one single node. An object graph can be designed freely. Searching object graphs is super-fast and takes mostly only microseconds.


Only one Data Model: Java Classes only!

No more Database Data Model. No more Mappings.

Let your Classes as they are. No Strings attached!

Your Java classes are your only data model. There is no additional database data model. Thus, you don't have to adapt your classes effortful to any database data model. You can design your object model freely and use any Java type. There is no need for special superclasses, special interfaces, annotations, mappings or any other internal configurations. No dependencies. Just POJOs. You can use your classes as they are. If you have to change your data model, simply change your classes. That's all.

public class Customer {

   private String firstname;
   private String lastname;
   private String mail;
   private Integer age;
   private Boolean active;
   private Set<Order> orders;

   ...
}

Storing Data persistently

MicroStream enables you to persist single Objects and complex Subgraphs

You can store everything from a single object up to complex subgraphs persistently on disk by calling only one simple store method. You decide explicitly if and when an object is persisted. All stored objects are appended to the file-storage. Any store operation is automatically transaction-safe. MicroStream enables you to store any Java type, collections, any custom type and even objects from third-party APIs.

DataRoot root = microstreamDemo.root();
root.getCustomers().add(customer);

microstreamDemo.store(root.getCustomers());
Store any single Object or Subgraph explicitly
Using inheritance
is Trouble-free
Strong Consistency
Store any Java Type
ACID Transactions
High Secure
Custom-tailored Type
Handling for best Performance
Multithreaded super-fast
Write Operations
Covers 3 CRUD Operations:
Create, Update & Delete

Loading Data

MicroStream allows you to load single Objects and complex Subgraphs. No more classic Selects. Just calling Getter.

After starting your app, MicroStream initially loads all object IDs only and creates the entire object graph structure in RAM. Thus, you get a fully indexed in-memory database.


Loading Data is fully automized

Loading data is different to database systems. MicroStream is fully objec-toriented. There are no more classic selects. To read an object, you just have to call its get method as you are used to, and MicroStream takes care of the rest.


Fully In-Memory is best, but not mandatory

You decide, how much data you load into RAM. If you have enough RAM, you can load the entire database into RAM and benefit from max speed without any IO ops. If your data storage is much bigger than your RAM, you can load data on-demand only. In order to do that, MicroStream enables you to load any single object as well as complex subraphs lazy.


No Object Copies

Loaded objects are merged into the object graph automatically, so you never have to deal with inconvenient object copies.

1Initially, the entire Object-Graph is in RAM. Object IDs only. No Data. Low Memory Footprint.
2Loading any Object or Subgraph on Demand.
3Loaded Objects are merged into the Object Graph automatically.


public class Customer {

    ...
    private Lazy<Set<Order>> orders;
    ...

    public Set<Order> getOrders() {
       return Lazy.get(this.orders);
    }

    public void setOrders(final Set<Order> orders) {
       this.orders = Lazy.Reference(orders);
    }

    ...
}
Load any single Subgraph on Demand
No more classic Selects, simply call Getter
Loaded Objects are merged into the Object Graph
Memory Management by MicroStream or explicit
No inconvenient Object Copies
Multithreaded super-fast Read Operations

Queries with Java Streams API executed in Microseconds,
up to 1000 Times faster than any Database System,
even up to 100 Times faster than any Data Cache.

Java Streams API is an enormously powerful and fully typesafe query language for searching object graphs. Searching even giant and complex object- graphs in the memory takes only microseconds while database systems waste milliseconds for the same result. In other words, Java Streams are up to 1000 times faster than any database system and, believe it or not, even up to 100 times faster than reads from an in-memory data-cache like Ehcache or Redis.

public static void booksByAuthor()
{
    final Map<Author, List<Book>> booksByAuthor =
        ReadMeCorp.data().books().stream()
            .collect(groupingBy(book -> book.author()));

    booksByAuthor.entrySet().forEach(e -> {
        System.out.println(e.getKey().name());
        e.getValue().forEach(book -> {
            System.out.print('\t');
            System.out.println(book.title());
        });
    });
}
Core Java instead of proprietary Query Languages
No Network Bottlenecks, no Latencies
Queries are executed In-Memory
Type-safe, good testable and clean Code
Parallel Execution of Queries possible

More Core Features

Storage Garbage Collector

Legacy and corrupt data are removed from the storage by MicroStream automatically.

REST Interface

REST interface allows remote access to the storage data.

High Quality API

MicroStream is a high quality, but slim Java API.

Class Version Handling

Different versions of your classes are handled automatically. Custom mappings are also supported.

Storage Browser

Graphical user interface for browsing through your storage data remotly.

Simple Implementation

MicroStream can be included into any Java project via Maven.

Backups

Reliable and fully individual configurable data backup processes.

Highly configurable

The MicroStream is highly configurable by its API.

Supported Storages



NoSQL

Oracle NoSQL Database MySQL

Distributed Cache

Oracle Coherence

Object Store

Oracle Cloud

RDBMS

Oracle Database

Mobile

SQLite

Runs wherever Java runs

One and the same Java API for all Platforms

Desktop
On-Premise
Cloud
Container-ready
Perfect persistence for
MicroServices
Mobile & Embedded
Native
JDK 8+

Use any JVM Technologies

Java Android GraalVM Quarkus Kotlin Scala Groovy

Anything missing in MicroStream?

With MicroStream you can use all Java Concepts and any Java API. Just have a look at the great Java Ecosystem.

GraphQL

GraphQL is a query language for APIs. With GraphQL you can open your MicroStream app to external users and apps, allowing external queries.


Learn more ...
Lucene

Apache Lucene is a powerful search engine for Java. Lucene allows you to add such as full-text search to your MicroStream app.


Learn more ...
OpenJ9

OpenJ9 is a very powerful Java-VM optimized for big RAM sizes and providing 63% less memory footprint. Thus, OpenJ9 is perfect for your MicroStream in- memory database apps.


Learn more ...
RapidClipse X

RapidClipse X is a visual Java IDE based on Eclipse, that lets you create complete and great looking Java in- memory database apps with MicroStream in record time.


Learn more ...