68 lines
1.6 KiB
C++

//
// Created by Kirill Zhukov on 20.04.2025.
//
#ifndef UDB_H
#define UDB_H
#include <string>
#include <unordered_map>
#include <atomic>
#include <thread>
#include <memory>
#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"
#include "utils/config/GlobalConfig.h"
namespace usub::core
{
class UDB
{
public:
UDB(const std::string& db_name, const std::string& shm_name, utils::DatabaseSettings settings, bool create_new = true);
~UDB();
void run();
private:
void process_command(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<utils::LFSkipList<utils::Hash128, std::string>> memtable_manager_;
utils::Compactor compactor_;
std::unordered_map<utils::Hash128, std::string> fast_cache_;
std::atomic<bool> running_;
std::thread background_flush_thread_;
};
}
#endif // UDB_H