Skip to content
This repository has been archived by the owner on Oct 29, 2024. It is now read-only.

huhaoo/db-lab1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wing

Clone并创建自己的private repo

  1. 这里 创建一个新的空repo并确保权限为private。注意,Github自带的fork无法将visibility修改为private。假设新建的repo为[email protected]:your-id/your-repo.git

  2. 在自己的机器或者我们提供的server上clone自己的repo:

git clone [email protected]:your-id/your-repo.git wing
cd wing
  1. 从课程的public repo pull代码,并push到自己的repo中:
git remote add public [email protected]:iidb/wing.git
git pull public main
git submodule update --init
git push origin

未来如果实验框架有更新,则可以用git fetch public && git merge public/main将更新合并到本地。

Build

安装依赖

除了基本的编译环境以外,wing主要依赖GTest。因此这里主要介绍GTest库在一些平台的安装方法。

Debian

sudo apt install libgtest-dev

ArchLinux

sudo pacman -S gtest

Nix包管理器

无需使用root权限。但是Nix包管理器安装的库只能在nix-shell中使用。

nix-shell -p gtest cmake

然后在nix-shell中生成的shell中进行操作:

mkdir build
cd build
cmake ..
make -j8

本地编译

Wing使用C++20,你可能需要升级编译器。

Windows:Mingw-w64

Linux:更新GCC版本到10或以上。或者使用Clang。

使用G++编译命令:

mkdir build
cd build
cmake .. -DBUILD_JIT=OFF -DCMAKE_BUILD_TYPE="release" -DCMAKE_CXX_COMPILER="g++" -DCMAKE_C_COMPILER="gcc"
cmake --build . -j

使用Clang编译命令:

mkdir build
cd build
cmake .. -DBUILD_JIT=OFF -DCMAKE_BUILD_TYPE="release" -DCMAKE_CXX_COMPILER="clang++" -DCMAKE_C_COMPILER="clang"
cmake --build . -j

编译后会产生wing的命令行版本和测试程序。wing的命令行用法见docs/pre.md。

调试时,用debug版本编译,使用-DCMAKE_BUILD_TYPE="debug"。强烈建议release版本和debug版本存在不同文件夹,如build-releasebuild-debug,这样在切换模式时就不用全部重新编译。

使用LLVM JIT时,使用-DBUILD_JIT=ON。LLVM最好是11及以上版本,以下也可以试试。Linux安装LLVM-dev,Windows很麻烦。

build目录下,Linux下可以直接用make -j线程数,或者自动将线程数设置为核数make -j$(nproc),你可以在~/.bashrc里alias一下:alias jmake='make -j$(nproc)'。Windows可能是mingw32-make -j之类的。。。

P.S. make -j不限制使用的线程数,因此如果核数不够的话可能并不会变快,而且还会增大CPU资源的抢占并消耗更多内存。

使用其他构建系统(如ninja): -G "Ninja"

如果你的电脑较慢,强烈建议编译release和debug两份,这样就不用每次改build type的时候重新全部编译。而且可以把make换成ninja。

通过Docker编译(不推荐作为开发环境,但与autolab评测环境一致,可以测试使用)

用docker构建镜像,镜像中包含了编译运行wing所需的最基本环境:

docker build . -t wing
docker create -it --name wing -v ./:/wing wing

通过以下命令进入Docker container中运行wing:

docker start -ai wing

wing的目录位于/wing下。

测试

wing使用GTest进行测试。用于测试的源代码在test/下面。编译完成后,用于测试的可执行文件会生成在build/test/下面。下面以build/test/test_btree为例介绍使用GTest的用于测试的可执行文件的用法。

cd build
# 查看使用帮助
./test/test_btree --help
# 运行单个测试
./test/test_btree --gtest_filter=BPlusTreeTest.Basic1
# 运行名字符合模式的所有测试。下例将会运行 SeqInsertGetValue16B1e1 到 SeqInsertGetValue16B1e6 的所有测试
./test/test_btree --gtest_filter="BPlusTreeTest.SeqInsertGetValue16B*"

使用gtest-parallel可以进行多线程测试:https://github.com/google/gtest-parallel/

# 运行文件中的所有测试
/path/to/gtest-parallel ./test/test_btree
# 运行多个文件中的所有测试
/path/to/gtest-parallel ./test/test_btree ./test/test_basic
# 运行一部分测试
/path/to/gtest-parallel ./test/test_btree --gtest_filter=xxx
# 默认线程数为核数。可以指定线程数
/path/to/gtest-parallel --workers=8 ./test/test_btree

你可以在~/.bashrc里alias一下,方便使用:

alias gtp="/path/to/gtest-parallel/gtest-parallel --workers=8"

Documentation

有关命令行用法、wing实现的SQL语法的文档见docs/。

LICENSE

Except as otherwise noted (below and/or in individual files), this project is licensed under MIT license.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages