vlingo/symbio

vlingo/symbio, that’s an unusual name. What is its origin?

I am glad you asked! There is a similar symbiotic relationship to those found in nature between domain models and persistence. They depend on each other, even though they may not be aware of each other.

OK! Interesting! Tell us more about vlingo/symbio.

Sure. The vlingo/symbio parent tool is a set of protocols and default in-memory implementations. The protocols are usable by concrete implementations. The in-memory implementations are useful for testing. It is the Reactive, scalable, and resilient Object, CQRS, and Event Sourcing storage and projection tool for services and applications built on the vlingo/PLATFORM.

A set of protocols. Fascinating. What are they?

There are three primary kinds of storage mechanism protocols available: ObjectStore, StateStore, and Journal. In recent years, object storage has been managed by a technique known as object-relational mapping (ORM), where objects are disassembled to fit into the relational table, row, and column structures. Many ORM tools are available to developers. All of these are or can be supported by a vlingo/symbio ObjectStore implementation.

What ObjectStore implementations are available?

We have Apache Geode, HSQLDB, PostgreSQL and YugaByte implementations. Adding support for other databases is a snap and will be supplied on a need basis.

What is StateStore?

StateStore is a simple CQRS Key-Value storage. The values can be of type CLOB/BLOB. The StateStore mechanism can be run against a number of persistence engines. Use it for both Command/Write Models and Query/Read Models.

Have you implemented StateStore in vlingo/symbio?

Yes! These are the available storage implementations: Apache Geode, DynamoDB, HSQLDB, and PostgreSQL. Adding additional JDBC storage delegates is a straightforward process requiring a few hours of work. We welcome you to add support for your favorite database!

What is Journal Storage? And what do you have implemented?

The Journal and related protocols support simple-to-use Event Sourcing, including Journal Reader for streaming across all entries in the journal, and Stream Reader for reaching individual “sub-streams” belonging to entities/aggregates in your application. vlingo/symbio has implementations in JDBC over Postgres and FoundationDB and supporting asynchronous readers.