Vesper is a data-persistence framework that enables you to query and update data as JSON, independent of the type of database that is actually storing the data.
With Vesper, you can switch between a simple text file, a SQL database, or exotic NOSQL or RDF data stores without having to change your application code. And unlike other approaches to object persistence, such as ORMs (Object-Relational Mappers like Ruby-on-Rail’s ActiveRecord), Vesper doesn’t trade database independence for a codebase dependent on a particular implementation language or framework – it’s just JSON.
Vesper can accelerate application development by letting you make arbitrary changes to your data at runtime without re-defining schemas or changing class definitions. And its JSON-based query language removes the “impendence mismatch” between native application data structures and SQL without giving up the power and expressiveness provided by a full-featured query language.
Vesper’s data model supports explicit metadata designed to enable JSON to be used as data interchange format not only locally but also for decentralized, Internet-scale sharing of public data. Vesper uses this metadata to implement advanced data management functionality such as full revisioning of data, transaction coordination, and asynchronous replication without placing any special requirements on the underlying data store.
The core concept behind Vesper is a mapping of the JSON data format to an abstract intermediate representation which is designed to be compatible with a wide variety of types of data stores, including the relational table model of SQL and RDF’s set model. Access to backend data stores are provided by drivers that expose an API that conforms to this mapping.
Application primarily in two ways: through the pJSON (persistent json), a set of conventions for writing JSON that can be used to update a supported datastore; and through Introducing jsonQL, a query language for accessing data in a data store as JSON.
There are three ways you can use Vesper:
- as stand-alone HTTP endpoint that you treat as a database server.
- as a Python library you embed in your application framework of choice.
- as an application server you can build your application on top of.
Currently at the proof-of-concept stage with core subset of functionality robust enough for use on small scale applications.