68 lines
1.6 KiB
C++
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
|