add initial design

This commit is contained in:
2024-04-15 11:22:09 +00:00
parent ed2b9463df
commit dbbb7dc5a4
4 changed files with 22 additions and 5 deletions

0
UI/main.py Normal file
View File

20
design.md Normal file
View File

@ -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

View File

@ -1,5 +1,5 @@
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
set(BACKEND_EXETUABLE_NAME "backend") set(BACKEND_EXETUABLE_NAME "core-cli")
if(OJ_TEST_BACKEND) if(OJ_TEST_BACKEND)
set(BACKEND_EXETUABLE_NAME "code") set(BACKEND_EXETUABLE_NAME "code")
endif() endif()

View File

@ -13,13 +13,10 @@ const bool global_log_enabled = false;
const bool global_log_enabled = true; const bool global_log_enabled = true;
#endif #endif
int main(int argc, char *argv[]) { 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"); argparse::ArgumentParser fsck_command("fsck");
fsck_command.add_description("Check and fix data"); fsck_command.add_description("Check and fix data");
program.add_subparser(fsck_command); 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); program.add_argument("-d", "--directory").help("Directory to serve").default_value(std::string(".")).nargs(1, 1);
auto &group = program.add_mutually_exclusive_group(); auto &group = program.add_mutually_exclusive_group();
group.add_argument("-c", "--consolelog").help("Enable console log").default_value(false).implicit_value(true); group.add_argument("-c", "--consolelog").help("Enable console log").default_value(false).implicit_value(true);