diff --git a/UI/main.py b/UI/main.py new file mode 100644 index 0000000..e69de29 diff --git a/design.md b/design.md new file mode 100644 index 0000000..7109030 --- /dev/null +++ b/design.md @@ -0,0 +1,20 @@ +# 规划的Bonus实现方式 +- 缓存:LRU +- 空间回收 +- 快照:不内置于数据库系统,而是直接针对整个数据文件夹打快照(类似于git,在火车票系统后端处于非活动状态时操作,比对工作文件夹和版本库中的最后一次commit,然后打一个新的commit进去),额外消耗空间为压缩后的 当前文件实际大小+变化量,使用zstd算法压缩。交互方式:`./core-cli snapshot [options]` +- 并发:内置于数据库系统,基于`std::shared_mutex`的简单并发。(但火车票系统会直接在整个业务层面上读写锁,因此不会直接使用数据库系统的并发安全)。 +- 容错:不内置于数据库系统,由火车票系统针对实际业务逻辑记录日志。在文件系统层级上修复完损伤后,运行`./core-cli fsck`检查是否有可能有损坏,借助快照工具修复可能的损伤。 +- 前端:一个使用正经框架写的简洁美观的UI,无响应式设计。 + +因为详细的数据库相关知识没学,所以正经并发和更细粒度的容错就不打算自己瞎搓了。 + +# 内核设计 +- STLite:提供STL中被ban掉的那些功能 +- bpt:原始B+树以及相关简单封装,和其他一些涉及具体磁盘存储的东西 +- 一个火车票系统执行引擎 +- 一个直接的命令行交互系统,用于OJ测试/单会话模式/快照管理/数据错误检查 +- C Extensions封装,用于对接服务端 +# UI设计 +- 语言:Python +- 与内核的交互:C Extensions +- Web框架:FastAPI + socket.IO + (React?) + BootStrap \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f09f7ab..d69736f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,5 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) -set(BACKEND_EXETUABLE_NAME "backend") +set(BACKEND_EXETUABLE_NAME "core-cli") if(OJ_TEST_BACKEND) set(BACKEND_EXETUABLE_NAME "code") endif() diff --git a/src/main.cpp b/src/main.cpp index b945326..345234a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,13 +13,10 @@ const bool global_log_enabled = false; const bool global_log_enabled = true; #endif int main(int argc, char *argv[]) { - argparse::ArgumentParser program("backend", main_version + "-" + build_version); + argparse::ArgumentParser program("core-cli", main_version + "-" + build_version); argparse::ArgumentParser fsck_command("fsck"); fsck_command.add_description("Check and fix data"); program.add_subparser(fsck_command); - argparse::ArgumentParser server_command("server"); - server_command.add_description("Start RESTful server"); - program.add_subparser(server_command); program.add_argument("-d", "--directory").help("Directory to serve").default_value(std::string(".")).nargs(1, 1); auto &group = program.add_mutually_exclusive_group(); group.add_argument("-c", "--consolelog").help("Enable console log").default_value(false).implicit_value(true);