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!
c++ rocksdb
Commentami!