Speedment is a Java toolkit and runtime for accelerated SQL database applications leveraging In-JVM Data Store technology. Speedment provides immediate relief from performance bottlenecks and speeds up application response times by orders of magnitude, gives database load reduction and application latency reduction. Speedment is modular. Speedment allows for a stepwise implementation and old legacy system can co-exist with the Speedment platform. Speedment can scale linearly with the number of CPU cores and threads. Speedment can be deployed in cloud environments/local clouds or on dedicated servers.
Speedment Java toolkit and runtime is a Java Stream ORM (Object Relational Mapping). It generates Java object relational mapper classes and API from SQL database metadata. The generated API is stream based and lets users use standard Java streams for querying databases. The runtime functionality is accessed via traits describing behavioural characteristics rather than explicit references to the implementing classes. This approach ensures a modular and decoupled design.
Automatic Generation of Javacode from the SQL Database
Speedment is using the database as the source-of-truth, both when it comes to the domain model and the actual data itself. Speedment automatically generates the database Java code for your application which saves substantial time when developing new applications as well as maintaining existing applications. Speedment analyses the underlying data sources’ metadata and automatically creates code which directly reflects the structure (i.e. the “domain model”) of the underlying data sources.
Stream Based API
The generated API is stream based and lets user use standard Java streams for querying databases. By leveraging automatic code generation, the code will be free from manual errors and is quickly generated and can greatly reduce development time and improve application quality. Speedment also generates Javadocs automatically. The generated classes support inheritance, polymorphism, overriding and other object oriented features. Thus, it is possible to write custom implementations of persistent classes. Custom code and changes to generated code will be retained even though the code is re-generated.
Queries the Database Using Lamdas, no Need for SQL Coding
Essentially relational databases are made up of huge chunks of data organized in table-like structures. These structures are ideal for filtering and mapping operations, as can be seen in the SELECT, WHERE and AS statements of the SQL language. Speedment integrates perfectly with the Java 8 Stream API to query databases using lambdas without writing a single line of SQL. The streams are optimized to reduce database load, latency and network load. Speedment uses a custom delegator for the Stream API to manipulate a stream in the background, optimizing the resulting SQL queries.
With Speedment, you will know that your data types are correct at code generation
rather than weeks into the testing phase or even worse, in production. No more SQL syntax errors in your applications.
Parallelism and Transaction Safety
Speedment supports parallelism using standard Java Stream semantics. This way, it is possible to easily work with database content in parallel and produce results much faster than if processed sequentially. Speedment provide full transaction safety, Full ACID (Atomicity, Consistency, Isolation, Durability), with selectable isolation levels. In microservice application architectures, Speedment supports Eventual Consistency for increased scalability, decoupling and performance.
Eliminates Null Pointer Exception
Speedment analyzes if null values are allowed for a column in the database and wraps the values as appropriate in Java 8 Optionals. This protects your application for one of the most common Java error manifestations historically: the NullPointerException.
Database Connectors and Deployment
Speedment comes out-of-the-box with support for MySQL, MariaDB and PostgreSQL. Support for Oracle DB and Microsoft SQL Server can be added using enterprise plugins.Speedment generates Spring annotations as a part of the regular Speedment code generation process.
Speedment In-JVM-memory Data Store Plug-in
The Speedment In-JVM-memory Data Store automatically analyses the SQL relational database structure and can create a corresponding In-JVM-memory Data Store. The Data Store is structured using a column oriented scheme, allowing data to be retrieved in O(1) or O(log(n)) time using any of the columns. For many operations (e.g. <, >, in, >=, <=, startWith() and sort()), rows can be obtained in sub-millisecond time, even for data sets in the terabytes. Thus, Speedment offers several magnitudes performance increase over standard JDBC “SELECT” code. This means that the original database can be retained in a traditional safe RDBMS environment and that legacy tools can still be used while it is, at the same time, possible to benefit from the advantages of the Speedment technology.
Off-Heap Storage Engine
The Speedment In-JVM-memory technology keeps all the data in the JVM itself, as close as possible to your application. Speedment supports very large JVMs, in the tenths of terabytes, using its Off-Heap Storage Engine, with no impact on Garbage Collect (GC) times. An automatic analysis of the database structure enables prediction of queries in the form of Materialized Object Views. These results are available before the query is made. The underlying database consistency remains unaffected and will be responsible for storing and validating data and data constraints. If the underlying database goes down, the Speedment application will continue to run queries. Just add new nodes to increase space and performance. Speedment makes sharing and managing data on a cluster as simple as it is on a single server.
Speedment REST API Manager Plug-in
The Speedment REST API Manager publishes a REST API view of the underlying data. It allows micro-services to compile and maintain aggregates (also called materialized views) directly using event sourcing and CQRS (Command Query Responsibility Segregation). Micro-services can easily through a REST API subscribe to the events and can automatically compile representations of aggregated data views, allowing fully asynchronous non-blocking operation between microservices. Tomcat, Glassfish and WebLogic support is guaranteed. Other JavaEE servers should work but has not been verified.
Speedment Database Plugin-in
Speedment Database Plug-in provides support for Oracle, MySQL, PostgreSQL, DB2, AS400, MariaDB and SQL Server JDBC connections. It plugins to Speedment Java Stream ORM, Speedment In-JVM-memory Data Grid and Speedment SQL DB Reflector.