/
smychkov
/
SStorage
Обзор
Документация
Войти
/
smychkov
/
SStorage
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
bench/bench_get.cpp
65 строк
2 KB
Андрей Смычков
chore: benchmarks + docs update + remove CMakeLists.txt + legacy data
25 апр 2026, 09:25
25 апр 2026, 09:25
66c16af
Код
Авторство
О чём код?
//============================================================================ // Бенчмарк: throughput get-операций (из MemTable и SSTable) //============================================================================ #include "../src/core/database.hpp" #include <chrono> #include <cstdio> #include <cstdlib> #include <filesystem> #include <iostream> #include <string> #include <sys/stat.h> #include <unistd.h> using namespace sstorage; int main(int argc, char** argv) { const int kOps = argc > 1 ? std::atoi(argv[1]) : 100000; std::string dir = "/tmp/sstorage_bench_get_" + std::to_string(::getpid()); ::mkdir(dir.c_str(), 0755); Config cfg; cfg.setDataDirectory(dir); Database db(cfg); db.open(); // Заполняем данными и форсим flush, чтобы большая часть была в SSTable for (int i = 0; i < kOps; ++i) { char k[32]; std::snprintf(k, sizeof(k), "key_%08d", i); db.put(k, "some_value_payload"); } db.flush(); // Hit: ключ существует auto start = std::chrono::steady_clock::now(); size_t hits = 0; for (int i = 0; i < kOps; ++i) { char k[32]; std::snprintf(k, sizeof(k), "key_%08d", i); if (db.get(k).has_value()) ++hits; } auto end = std::chrono::steady_clock::now(); double sec = std::chrono::duration<double>(end - start).count(); std::cout << "bench_get hit: " << kOps << " ops in " << sec << "s = " << (kOps / sec) << " ops/sec (hits=" << hits << ")\n"; // Miss: ключа нет (bloom должен быстро отсекать) start = std::chrono::steady_clock::now(); size_t misses = 0; for (int i = 0; i < kOps; ++i) { char k[32]; std::snprintf(k, sizeof(k), "missing_%08d", i); if (!db.get(k).has_value()) ++misses; } end = std::chrono::steady_clock::now(); sec = std::chrono::duration<double>(end - start).count(); std::cout << "bench_get miss: " << kOps << " ops in " << sec << "s = " << (kOps / sec) << " ops/sec (misses=" << misses << ")\n"; db.close(); std::error_code ec; std::filesystem::remove_all(dir, ec); return 0; }