/
smychkov
/
SStorage
Обзор
Документация
Войти
/
smychkov
/
SStorage
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/core/database.hpp
83 строки
3 KB
Андрей
feat: top N keys + scan stream (range/top/all) with pagination
14 июл 2026, 12:56
14 июл 2026, 12:56
56c6264
Код
Авторство
О чём код?
#ifndef SSTORAGE_CORE_DATABASE_HPP #define SSTORAGE_CORE_DATABASE_HPP //============================================================================ // Database — публичный фасад над LSMTree //============================================================================ // Тонкая обёртка, которая: // - принимает Config // - валидирует размеры ключа/значения // - делегирует put/get/remove/scan/stats/flush/compact в LSMTree // // Это API для CLI, HTTP-обработчика и gRPC-обработчика. //============================================================================ #include "config.hpp" #include "../lsm/lsm_tree.hpp" #include <memory> #include <optional> #include <string> #include <utility> #include <vector> namespace sstorage { struct DatabaseStats { uint64_t memtableSize = 0; uint64_t immutableCount = 0; std::vector<uint64_t> levelRecords; std::vector<uint64_t> levelFileCounts; uint64_t totalRecords = 0; }; class Database { public: explicit Database(const Config& config); ~Database(); // Открыть БД (recovery). bool open(); // Закрыть БД (flush + остановка фоновых потоков). void close(); //------------------------------------------------------------------ // Основные операции (put/get/remove/scan) //------------------------------------------------------------------ bool put(const std::string& key, const std::string& value); std::optional<std::string> get(const std::string& key); bool remove(const std::string& key); std::vector<std::pair<std::string, std::string>> scan( const std::string& fromKey, const std::string& toKey, size_t limit = 1000); //------------------------------------------------------------------ // Потоковый обход + top. См. contract S1. Делегируют в LSMTree. //------------------------------------------------------------------ size_t scanStream(const std::string& fromKey, const std::string& toKey, size_t limit, const ScanCallback& callback); size_t scanAll(size_t limit, const ScanCallback& callback); std::vector<std::pair<std::string, std::string>> top(size_t n); //------------------------------------------------------------------ // Административные операции (flush/compact/stats) //------------------------------------------------------------------ bool flush(); bool compact(); DatabaseStats stats() const; // Геттер конфигурации const Config& config() const { return config_; } private: Config config_; std::unique_ptr<LSMTree> lsm_; bool opened_ = false; }; } #endif