Transistore

Distributed data store for transient (temporary, time-bound) data. Based on ClusterMate/StoreMate

View the Project on GitHub FasterXML/TransiStore

TransiStore

TransiStore is a distributed data store for temporary (time-bound, possibly but not necessarily transient) data, such as intermediate processing results (for Map/Reduce, Hadoop), staging area between high-volume procuders and consumers (log processing and aggregation), or just as general-purpose store for data exchange.

TransiStore is built on ClusterMate platform, and serves as a sample system. Note that implementing storage system with different behavior, using ClusterMate (possibly using TransiStore as sample code) is highly encouraged: it is not meant as "The" storage system; although if it works as-is for your use case, all the better.

Basics

License

'TransiStore` (and all its dependencies) are licensed under Apache 2.0.

Functionality

TransiStore can be viewed as a distributed key/value ("BLOB") store which explicitly supports Key Range queries for primary keys. Stored entries have explicit time-to-live setting and service removes expired entries if they have not been explicitly deleted earlier. Clusters are horizontally scalable and allow addition/removal of storage nodes, without restarting other nodes.

The main limitation -- as of now, at least -- is that content is Write-Once; that is, entries are immutable after being added: they may however. be explicitly deleted (and if not, will expire as per time-to-live settings). While this is a limit that use cases must conform to, it greatly simplifies implementation and improves handling performance, as conflict resolution is simple to handle (due to minimal number of cases to resolve).

Underlying (per-node) storage

Storage layer comes from ClusterMate (which in turn builds on StoreMate project.

Here are some highlights (for more refer to StoreMate project) of storage system:

and additional features that ClusterMate provides are:

Configuration

Configuration is simple: it consists of a single JSON configuration file. Sample configuration files can be found from under sample/.

Why not X?

(where X may be "HBase", "Cassandra", "Voldemort", "Riak" or any of dozens of distributed key/value stores)

Features that separate TransiStore for most other "noSQL" key/value stores are ones listed earlier:

  1. Can store LARGE entries (similar to S3): authors use it for storing 10 megabyte sized entries. It is designed for such usage -- you can even do partial GETs (with HTTP Range header)
  2. Key-range queries: some noSQL systems (like HBase) support them, but most don't (Cassandra, Voldemort), at least with recommended set ups. TransiStore is designed to fully support them.
  3. Automatic expiration of data: useful for intermediate results (Hadoop processing? Log aggregation?), weekly reports, or even some types of caching. You just specify maximum life-time for entries and system purges them as necessary
  4. Simple configuration: single configuration file, used for all nodes; and even clients if you want.
  5. Automatic node recovery: once a node has its configuration file, it is ready to start up and synchronize entries it needs -- no manual process or delicate coordination needed (NOTE: there will be need to build dashboards, tools to help track progress -- but foundational functionality works for actual syncing)

There are many more advanced features; but most of them are common within this class of servers (recovery, configurable number of copies required, statistics/metrics).

Documentation

Here are things you will probably want to read first:

and here's some more stuff: