Utilizzare RocksDB in C++

Mattepuffo's logo
Utilizzare RocksDB in C++

Utilizzare RocksDB in C++

RocksDB è un database embedded key-value ad alte prestazioni sviluppato da Meta (Facebook).

È basato su LevelDB di Google, ma con numerose ottimizzazioni e funzionalità aggiuntive.

RocksDB è progettato per applicazioni che richiedono accesso rapido ai dati su storage locale (SSD o dischi fissi) con grandi volumi di scritture e letture.

Viene usato principalmente come motore di storage sottostante per sistemi più complessi, piuttosto che come database standalone.

In questo articolo vediamo come usarlo in C++.

Prima di tutto dovete installarlo; se siete su Arch Linux o derivate:

# pacman -Sy rocksdb

Qui sotto un pò di codice:

#include <iostream>
#include <rocksdb/db.h>

int main() {
    rocksdb::DB* db;
    rocksdb::Options options;

    options.create_if_missing = true;

    rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db);

    if (!status.ok()) {
        std::cerr << "Errore nell'apertura del database: " << status.ToString() << std::endl;
        return 1;
    }

    std::cout << "Database aperto con successo!" << std::endl;

    status = db->Put(rocksdb::WriteOptions(), "nome", "Mario");

    if (!status.ok()) {
        std::cerr << "Errore nella scrittura: " << status.ToString() << std::endl;
    }

    db->Put(rocksdb::WriteOptions(), "cognome", "Rossi");
    db->Put(rocksdb::WriteOptions(), "età", "30");

    std::cout << "Dati inseriti!" << std::endl;

    std::string value;
    status = db->Get(rocksdb::ReadOptions(), "nome", &value);

    if (status.ok()) {
        std::cout << "Nome: " << value << std::endl;
    } else {
        std::cerr << "Chiave non trovata" << std::endl;
    }

    db->Get(rocksdb::ReadOptions(), "cognome", &value);
    std::cout << "Cognome: " << value << std::endl;

    db->Get(rocksdb::ReadOptions(), "età", &value);
    std::cout << "Età: " << value << std::endl;

    status = db->Delete(rocksdb::WriteOptions(), "età");
    if (status.ok()) {
        std::cout << "Chiave 'età' cancellata" << std::endl;
    }

    status = db->Get(rocksdb::ReadOptions(), "età", &value);
    if (!status.ok()) {
        std::cout << "Chiave 'età' non esiste più" << std::endl;
    }

    delete db;
    std::cout << "Database chiuso" << std::endl;

    return 0;
}

Io l'ho compilato così:

$ g++ -std=c++17 main.cpp -o main -lrocksdb -lpthread -ldl
$ ./main

Enjoy!


Condividi

Commentami!