How do you bridge between the two fundamentally different worlds of an object oriented language like Java and a relational database? Until now, you could take the time to write your own mapping layer, or use an Object Relational Mapper (ORM) like Hibernate. It can be convenient to use an ORM, but it can slow down your application, and configuration may be challenging. Speedment is a solution to this.
The Speedment Java stream ORM leverages standard Java 8 streams to allow fast development of relational database applications. This is possible since the Speedment toolkit fully handles the SQL specifics of the application. Abstracting away the query language, the development becomes faster and less error prone.
By leveraging Speedment Enterprise in memory acceleration. 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 and allows for a step-wise implementation. 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 anywhere, 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 behavioral characteristics rather than explicit references to the implementing classes. This approach ensures a modular and decoupled design.
Speedment Open Source supports MySQL, MariaDB and PostgreSQL.
Speedment Enterprise supports Oracle, DB2, AS400 and Microsoft SQL Server in addition to the ones mentioned above.
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.
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.
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.
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.
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.
Speedment automatically analyses the SQL relational database structure and creates corresponding in memory data. The Data 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.
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.
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.