LMDBAL 0.6.0
LMDB (Lightning Memory-Mapped Database Manager) Abstraction Layer
Loading...
Searching...
No Matches
Getting Started

Everything begins with a data base represented by the class LMDBAL::Base. It repesents a collection of key-value storages that are going to be stored in a sigle data base directory. To create a LMDBAL::Base you need to pick up a name of a directory that is going to be created on your machine.

#include "base.h"
//...
LMDBAL::Base base("myDataBase");
Database abstraction.
Definition base.h:53

LMDBAL::Base creates or opens existing directory with the given name in the location acquired with QStandardPaths::writableLocation(QStandardPaths::CacheLocation) so, the file system destination of your data depends on the QCoreApplication configuration of your app.

After you have created a LMDBAL::Base you probably want to obtain storage handlers. Now there are only two available types of them: LMDBAL::Storage and LMDBAL::Cache. The only difference between them is that LMDBAL::Cache additionally stores elements in a std::map to speed up the access.

#include "storage.h"
#include "cache.h"
//...
LMDBAL::Storage<uint32_t, uint32_t> storage = base.addStorage<uint32_t, uint32_t>("storage");
LMDBAL::Cache<int8_t, std::string> cache = base.addCache<int8_t, std::string>("cache");
Storage with additional caching in std::map.
Definition cache.h:30
This is a basic key value storage.
Definition storage.h:134

You can obtain handlers by calling LMDBAL::Base::addStorage() or LMDBAL::Base::addCache(). Note that the handlers still belong to the LMDBAL::Base and it's his responsibility to destroy them. You are not obliged to save those handlers, you can obtain them at any time later using methods LMDBAL::Base::getStorage() or LMDBAL::Base::getCache() calling them with the same template types and names.

//...
base.open();

After you have added all the storages you wanted it's time to open the data base with LMDBAL::Base::open(). At this point you are not allowed to add any more storages, otherwise LMDBAL::Opened exception will be thrown. It's currently the limitation of this little library and I might solve it in the future. Database will throw no exception if you will try to close the closed LMDBAL::Base or open again already opened one. Also it will automatically close itself if you'll try to destoroy onpened LMDBAL::Base.

//...
storage->addRecord(54, 75);
cache->addRecord(9, "my value");
uint32_t value1 = storage->getRecord(54); //75
std::string value2 = cache->getRecord(9); //"myValue"
uint32_t count1 = storage->count(); //1
uint32_t count2 = cache->count(); //1
storage->removeRecord(54);
cache->removeRecord(9);
virtual void addRecord(const K &key, const V &value, TransactionID txn)
Adds a key-value record to the storage (private transaction variant)
Definition storage.hpp:107
virtual void removeRecord(const K &key, TransactionID txn)
Removes one of the records (private transaction variant)
Definition storage.hpp:971
virtual void getRecord(const K &key, V &value, TransactionID txn) const
Gets the record from the database (private transaction, reference variant)
Definition storage.hpp:515
virtual SizeType count(TransactionID txn) const
Storage size (private transaction variant)
Definition storage.cpp:170

To discover how to store read and modify data take a look at LMDBAL::Storage and LMDBAL::Cache classes.