Skip to content

Repository files navigation

MiniDB

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.

Tehnologije

  • C++17: jezgra baze podataka, Database klasa
  • 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)

Struktura direktorija

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

Instalacija i izgradnja

  1. Klonirajte repozitorij:

    git clone https://github.com/korisnik/MiniDB.git
    cd MiniDB
  2. Izgradite C++ binarke i testove:

    make
    make test
  3. Instalirajte Node.js dependencije:

    cd node
    npm install

Pokretanje

C++ API binarka

U root direktoriju:

./main <command> <key> [value]

Primjeri:

./main insert ime Matej
./main get ime
./main update ime Ivan
./main delete ime

REST API (Node.js)

  1. U rootu provjerite da je main binarka prisutna.

  2. Pokrenite server:

    cd node
    node server.js
  3. API će slušati na http://localhost:3000.

Primjeri curl

  • 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

Testiranje

  • Jedinični testovi (Catch2):

    make test
  • Benchmark:

    make benchmark
    ./benchmark [<N>]
  • Stress test:

    make stress
    ./stress_test [<threads>] [<total>]

Daljnji razvoj

  • 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

About

Shortform project to show C++ DB optimizations and API calls

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages