// // Created by Kirill Zhukov on 20.04.2025. // #ifndef UDB_H #define UDB_H #include #include #include #include #include #include "Memtable.h" #include "utils/datastructures/LFCircullarBuffer.h" #include "core/SharedMemoryManager.h" #include "core/SharedCommandQueue.h" #include "core/Command.h" #include "utils/hash/Hash128.h" #include "utils/datastructures/LFSkipList.h" #include "utils/string/basic_utils.h" #include "utils/io/VersionManager.h" #include "utils/io/Wal.h" #include "utils/io/SSTableIO.h" #include "Memtable.h" #include "utils/io/RecoveryLog.h" #include "utils/io/Compactor.h" namespace usub::core { class UDB { public: UDB(const std::string& db_name, const std::string& shm_name, size_t shm_queue_capacity = 1024, size_t max_memtable_size = 1024 * 1024, bool create_new = true); ~UDB(); void run(); private: void process_command(const usub::core::Command& cmd); void background_flush_worker(); void recover_from_logs(); private: std::string db_name_; std::string shm_name_; size_t shm_queue_capacity_; size_t max_memtable_size_; SharedMemoryManager shm_manager_; SharedCommandQueue* command_queue_; utils::VersionManager version_manager_; shared_storage::MemTableManager> memtable_manager_; utils::Compactor compactor_; std::unordered_map fast_cache_; std::atomic running_; std::thread background_flush_thread_; }; } #endif // UDB_H