Native C and C++ bindings for the keradb embedded document database.
- C compiler (GCC, Clang, MSVC)
- C++11 or higher (for C++ wrapper)
- CMake 3.10+ (optional, for building)
- keradb native library
cd sdks/cpp
mkdir build && cd build
cmake ..
make
sudo make installC Example:
gcc -o myapp main.c -L../../../target/release -lkeradb -I../../../includeC++ Example:
g++ -std=c++11 -o myapp main.cpp -L../../../target/release -lkeradb -I../../include#include "keradb.h"
#include <stdio.h>
#include <stdlib.h>
int main() {
// Create database
keradbDB db = keradb_create("mydb.ndb");
if (!db) {
fprintf(stderr, "Failed to create database\n");
return 1;
}
// Insert document
const char* json = "{\"name\":\"Alice\",\"age\":30}";
char* id = keradb_insert(db, "users", json);
if (id) {
printf("Inserted ID: %s\n", id);
keradb_free_string(id);
}
// Find by ID
char* doc = keradb_find_by_id(db, "users", id);
if (doc) {
printf("Found: %s\n", doc);
keradb_free_string(doc);
}
// Close
keradb_close(db);
return 0;
}#include "keradb.hpp"
#include <iostream>
int main() {
try {
// Create database
auto db = keradb::Database::create("mydb.ndb");
// Insert document
auto id = db.insert("users", R"({
"name": "Alice",
"age": 30,
"email": "alice@example.com"
})");
std::cout << "Inserted ID: " << id << std::endl;
// Find by ID
auto doc = db.findById("users", id);
std::cout << "Found: " << doc << std::endl;
// Update
auto updated = db.update("users", id, R"({
"name": "Alice Smith",
"age": 31
})");
// Find all
auto users = db.findAll("users");
std::cout << "All users: " << users << std::endl;
// Delete
db.remove("users", id);
} catch (const keradb::Exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
return 1;
}
return 0;
}See keradb.h for the complete C API.
Key Functions:
keradbDB keradb_create(const char* path)- Create databasekeradbDB keradb_open(const char* path)- Open databasevoid keradb_close(keradbDB db)- Close databasechar* keradb_insert(keradbDB db, const char* collection, const char* json_data)- Insertchar* keradb_find_by_id(keradbDB db, const char* collection, const char* doc_id)- Findchar* keradb_update(keradbDB db, const char* collection, const char* doc_id, const char* json_data)- Updateint keradb_delete(keradbDB db, const char* collection, const char* doc_id)- Deletechar* keradb_find_all(keradbDB db, const char* collection, int limit, int skip)- Find allint keradb_count(keradbDB db, const char* collection)- Countchar* keradb_list_collections(keradbDB db)- List collectionsvoid keradb_free_string(char* s)- Free returned strings
The C++ wrapper provides RAII and exception-safe interface:
Database Class:
static Database create(const std::string& path)- Create databasestatic Database open(const std::string& path)- Open databasestd::string insert(const std::string& collection, const std::string& json)- Insertstd::string findById(const std::string& collection, const std::string& id)- Findstd::string update(const std::string& collection, const std::string& id, const std::string& json)- Updatevoid remove(const std::string& collection, const std::string& id)- Deletestd::string findAll(const std::string& collection, int limit = -1, int skip = 0)- Find allint count(const std::string& collection)- Countstd::string listCollections()- List collectionsvoid sync()- Sync to disk
cd sdks/cpp
mkdir build && cd build
cmake ..
make
./basic_exampleSee the examples directory for more usage examples.
The SDK includes a comprehensive benchmark comparing KeraDB vs SQLite performance.
Windows (PowerShell):
.\build-benchmark.ps1 -RunManual build with CMake:
mkdir build && cd build
cmake -DBUILD_BENCHMARKS=ON ..
make
./benchmarkTested on Windows 11, Intel Core i7, Release build
| Operation | KeraDB (ms) | SQLite (ms) | Speedup |
|---|---|---|---|
| INSERT | 3.05 | 44.06 | 14.5x faster |
| READ BY ID | 0.27 | 1.00 | 3.7x faster |
| READ ALL | 0.27 | 0.06 | 0.22x |
| COUNT (100x) | 0.02 | 0.94 | 46x faster |
| UPDATE | 1.52 | 33.36 | 22x faster |
| DELETE | 0.75 | 45.62 | 61x faster |
| Operation | KeraDB (ms) | SQLite (ms) | Speedup |
|---|---|---|---|
| INSERT | 28.05 | 44.00 | 1.57x faster |
| READ BY ID | 5.44 | 8.77 | 1.61x faster |
| READ ALL | 7.57 | 0.22 | 0.03x |
| COUNT (100x) | 0.01 | 0.97 | 124x faster |
| UPDATE | 7.23 | 41.83 | 5.8x faster |
| DELETE | 8.13 | 36.87 | 4.5x faster |
| Operation | KeraDB (ms) | SQLite (ms) | Speedup |
|---|---|---|---|
| INSERT | 238.39 | 51.41 | 0.22x |
| READ BY ID | 6.99 | 11.30 | 1.62x faster |
| READ ALL | 89.24 | 1.77 | 0.02x |
| COUNT (100x) | 0.01 | 1.02 | 137x faster |
| UPDATE | 7.39 | 37.69 | 5.1x faster |
| DELETE | 7.89 | 36.99 | 4.7x faster |
KeraDB excels at:
- ✅ COUNT operations - 46-137x faster (in-memory metadata)
- ✅ Single document lookups - 1.6-3.7x faster
- ✅ Updates - 5-22x faster
- ✅ Deletes - 4.5-61x faster
- ✅ Small/medium inserts - up to 14x faster
SQLite excels at:
- ✅ Bulk inserts at large scale (10k+ with prepared statements)
- ✅ Table scans (READ ALL) - optimized columnar access
Conclusion: KeraDB is ideal for document-oriented workloads with frequent single-record CRUD operations, while SQLite is better suited for bulk data operations and relational queries.
MIT License - See LICENSE file for details