Metakit is an efficient embedded database library with a small footprint. It fills the gap between flat-file, relational, object-oriented, and tree-structured databases, supporting relational joins, serialization, nested structures, and instant schema evolution.
There is a C++ API, a Python binding called Mk4py, and a Tcl binding called Mk4tcl. You can manipulate and exchange data between any of these.
Metakit is a portable library and has been used on Mac OS X, Windows, Unix, VMS, and others, spanning a range of 16- to 64-bit architectures, from PDA's to S390's.
Here are some key features of "Metakit":
Use your data on any platform:
· Both the code and datafiles are portable. All byte-ordering managed by the library.
Complex datastructures in one file:
· Store multiple nested data structures, to create document-centric applications.
Restructure datafiles, instantly:
· You'll have to see this to believe it: restructure files on-the-fly, while open.
Serialize all data for transport:
· Complementing commit/rollback of changes, data can also be serialized.
Recover from system-failures:
· The use of Stable Storage ensures that files cannot be corrupted by crashes.
Load on-demand, quick startup:
· Files are opened without reading data. Memory-mapped files if O/S supports it.
Behaves like containers:
· The API mimics container classes. Quickly get sizes and iterate over rows.
Wide range of operators built-in:
· Sorting, relational join / group by, set operations, permutations, hashing.
1-32 bits per int (or 64), variable-sized data:
· The largest int defines storage format. String/binary data is stored as var-sized.
Create fully self-contained applications:
· Can be linked shared or statically, for hassle-free deployment of components.
Tiny code (125 Kb as Win32 DLL):
· The library is extremely small, unused functions are stripped off in static links.
Simple API, just 6 core classes:
· Only a small interface is exposed. One header file lists all the classes you need.
Also use from Python and Tcl:
· These language bindings are coded to take advantage of the respective idioms.