MiniDB je jednostavna, ali robusna dretveno-sigurna memorijska baza ključ-vrijednost implementirana u C++-u, uz REST API sloj u Node.js-u. Projekt služi kao demonstracija end‑to‑end rješenja za prijavu na poziciju Database Engineering Intern u startupu Farseer.
- C++17: jezgra baze podataka,
Databaseklasa - std::unordered_map: internetsko spremište parova ključ-vrijednost
- std::shared_mutex + std::unique_lock/std::shared_lock: dretvena sigurnost
- Node.js + Express: REST API
- helmet, morgan: sigurnosni i logging middleware
- Catch2: jedinično testiranje C++ dijela
- make: automatizacija izgradnje (build)
MiniDB/
├── cpp/
│ ├── database.hpp # Definicija Database klase
│ ├── database.cpp # Implementacija metoda
│ └── main.cpp # API‑kompatibilna C++ binarka
├── node/
│ └── server.js # REST API sloj na hrvatskom
├── benchmarks/
│ ├── benchmark.cpp # Benchmark mjerenje brzine umetanja
│ └── stress_test.cpp # Paralelno testiranje s dretvama
├── tests/
│ └── test_database.cpp # Jedinični testovi za C++ (Catch2)
├── Makefile # Pravila za `make`, `make test`, `make benchmark`, `make stress`
└── README.md # Ovaj dokument
-
Klonirajte repozitorij:
git clone https://github.com/korisnik/MiniDB.git cd MiniDB -
Izgradite C++ binarke i testove:
make make test -
Instalirajte Node.js dependencije:
cd node npm install
U root direktoriju:
./main <command> <key> [value]Primjeri:
./main insert ime Matej
./main get ime
./main update ime Ivan
./main delete ime-
U rootu provjerite da je
mainbinarka prisutna. -
Pokrenite server:
cd node node server.js -
API će slušati na
http://localhost:3000.
-
Insert:
curl -X POST http://localhost:3000/data \ -H "Content-Type: application/json" \ -d '{"key":"ime","value":"Matej"}'
-
Get:
curl http://localhost:3000/data/ime
-
Update:
curl -X PUT http://localhost:3000/data/ime \ -H "Content-Type: application/json" \ -d '{"value":"Ivan"}'
-
Delete:
curl -X DELETE http://localhost:3000/data/ime
-
Jedinični testovi (Catch2):
make test -
Benchmark:
make benchmark ./benchmark [<N>]
-
Stress test:
make stress ./stress_test [<threads>] [<total>]
- Dodavanje persistencije (fajl ili baza)
- Naprednije validacije ključeva/vrijednosti
- Autentikacija i autorizacija API‑ja
- Integracija s Dockerom i CI/CD pipeline
Matej Čiček | 2025.05.20