First and foremost, VoltDB is a relational database, with tables columns and keys, just like many people are used to. You can use standard SQL to query and update rows in tables, either one at a time or in sets.
Early on, some users liked the operational features of VoltDB, the clustering, the management, etc…, but preferred a key-value data model. This is something people have done with MySQL for years, and VoltDB is perfectly compatible with it, though we find users often adding complexity when they realize how much simpler it can make their app.
Blobs, Compressed & Binary Data
One of the best things about using Java for stored server-side logic is that you gain access to a tremendous amount of existing software to use in your VoltDB database. Inside a stored procedure, you can compress or encrypt data before storing it in your database. With a user-defined function (UDF), you can decode Protobufs or some other storage VoltDB doesn’t natively support.
For an example of how to embed probabilistic data structures like HyperLogLog into an app using binary blobs, download our kit and look in the examples directory under “unique devices”, or just check out the example source on Github.
JSON & The Document Model
With the rise of JSON & document databases, VoltDB added full support for JSON columns inside the relational model. Through SQL extensions you can query within documents. You can even build indexes on paths within JSON documents stored in columns.
This allows for a full-document approach, but also for a more hybrid approach, where some data is structured and some data is less structured. Just one of many columns might be document data. And of course all JSON operations are fully transactional, with full cross-document transactional consistency.