What is Volante?
Volante is a small, fast, object-oriented, NoSQL, embeddable database for C# (and other .NET languages), designed for seamless integration with .NET programs. Think of it as SQLite for .NET.
Volante is BSD-licensed (free to use even for commercial projects)
When to use Volante?
Volante is designed for similar use cases as SQLite.
If your desktop application needs to persist data accross program invocations, you can store them in Volante database and seamlessly integrate with your C# application code.
Volante is extremely small (Volante.dll is less than 200kB), offers high-performance and rich feature set.
A database is stored in a single file.
Volante is not designed to be a replacement for a database server like MySQL or PostgreSQL.
Volante offers a rich set of features:
- object-oriented storage with garbage collection for removing objects that are no longer reachable
- seamless integration with .NET programs
- B-Tree indexes for quickly finding an object by a key
- T-Tree indexes for better in-memory performance
- R-Tree indexes for indexing spatial data
- time series support
- schema evolution
Basics of how Volante works
Objects are at the core of .NET. Storing objects in traditional SQL databases requires converting objects to and from SQL tables (a process sometimes automated by ORMs (object-relational mappers)). This conversion process is cumbersome and slows things down. Volante understands .NET objects and can store them natively, which is faster and allows for a better integration with your program.
The primary use case is for using Volante as a convenient way to persist and manipulate data in your .NET programs. Simply add Volante.dll to your project and use the API it provides for manipulating data (storing in the database, deleting, retrieving).
Basic things to know:
- database is stored in a single file
- Volante stores .NET objects that implement
- each stored objects gets a unique oid (object identifer, a 32-bit integer)
- objects can refer to other objects (via their oid)
- there is a special root object
- all other objects must be reachable from root object
- you can think of Volante as a graph database: root object is the beginning of a graph, it points to other objects which in turn point to other objects etc.
- objects that are no longer reachable from root will eventually be deleated (via database garbage collection process)
- indexes are used to quickly locate the data