跳转至

请不要将代码提交到公开仓库(包括提交带有题解的 Pull Request),同时也请不要抄袭其他同学或网络上可能存在的代码。

数据库系统实现原理与实践课程实验

这是数据库系统实现原理与实践课程的配套实验课程,本课程中所有的实验题目都将基于 MiniOB 完成。MiniOB 用 C++ 编写,是一个教学用途的数据库,其目标是为在校学生、数据库从业者、爱好者提供一个友好的数据库学习项目,更好地将理论、实践进行结合,提升同学们的工程实战能力。

数据库系统实现原理与实践课程涵盖数据库系统的核心组件,包含存储,查询,事务等章节。该课程的实验项目完全公开,适合学习系统编程技能的高年级本科生,欢迎对数据库系统实现原理与实践感兴趣的同学参与学习。

实验题目

这是本课程的实验题目,实验题目是修改 MiniOB 的各个组件并完成指定的功能,实验题目会持续更新。

零基础入门数据库系统实现原理与实践课程

由于很多同学是第一次接触 MiniOB,第一次接触 Github/Git/Docker/Vscode 等新事物,可能对实验流程完全没有概念。所以这里提供一个简单的实验流程,以及一个入门小任务(不需要写代码)帮助大家熟悉开发环境和测试平台,并获得本课程实验的基础分。

实验流程

  1. 学习 C++ 编程基础。 MiniOB 用 C++ 编写,如果你没有 C++ 编程基础,请先参考本文中 c++编程语言学习 的参考资料(或者其他任何资料)学习 C++ 基础知识。可以通过 Cpplings: src/cpplings/README.mdLAB#0 来做一个编程练习。
  2. 准备自己的代码仓库。 请参考文档,在 Github/Gitee 上创建自己的私有代码仓库。(请不要创建公开仓库,也不要将代码提交到公开仓库。)
  3. 准备自己的开发环境。 我们为大家提供了一个开源学堂在线编程环境,推荐大家使用开源学堂在线编程环境进行实验,在线编程环境已经提供了可以直接用于 MiniOB 编程的环境,便于大家快速开始。对于希望在本地准备开发环境的同学,这篇文档 中已经介绍的十分详细,请先认真阅读。如果仍有疑问,欢迎提问,也非常欢迎刚刚入门的同学分享自己准备开发环境的经验。
  4. 浏览实验手册中的文档。 实验手册文档位于本目录下,需要大家理解各个题目描述功能,写代码,实现题目要求的功能。MiniOB 教程中有一些视频讲解教程,可以辅助学习 MiniOB。
  5. 提交自己的代码到线上测试平台(需要使用 git 命令提交代码,可参考文档),在训练营中提交测试(参考训练营使用说明 )。
  6. 继续重复上述 4-5 步骤,直到完成所有实验题目。 提交代码后,训练营会自动运行你的代码,返回测试结果。你需要根据训练营中返回的日志信息,继续修改自己的代码/提交测试。并不断重复这一过程,直到完成所有实验题目。此时,恭喜你,本门课程的实验课程你拿到了满分。

入门小任务

这里提供给大家一个入门小任务,帮助大家熟悉开发环境和测试平台。这个小任务完全不需要编写任何 C++代码,主要用于给大家熟悉实验环境。

任务描述:创建自己的 MiniOB 代码仓库,在开发环境中验证 MiniOB 基础功能,并将代码提交到测试平台通过 basic 题目。

1. 学会使用 Git/Github,并创建自己的 MiniOB 代码仓库

在本实验课程中,我们使用 Git 进行代码版本管理(可以理解为用来追踪代码的变化),使用 GitHub/Gitee 做为代码托管平台。如果对于 Git/GitHub 的使用不熟悉,可以参考Git/Github 的官方文档。这里也提供了简易的Git 介绍文档帮助大家了解部分 Git 命令。

如果你已经对 Git/Github 的使用有了一定的了解,可以参考Github 使用文档Gitee 使用文档来创建自己的 MiniOB 代码仓库(注意:请创建私有(Private)仓库)。

准备自己的开发环境

MiniOB 的开发环境需要使用 Linux/MacOS 操作系统,建议使用 Linux 操作系统。我们为大家准备好了一个开源学堂在线编程环境建议大家优先使用在线编程环境,避免由于自己开发环境问题导致的bug),除此之外,我们准备了详细的本地开发环境准备文档

在开发环境中构建调试 MiniOB,并验证 MiniOB 的基本功能

在准备好自己的开发环境后,你就可以下载 MiniOB 代码,编译 MiniOB 并运行测试用例,验证 MiniOB 的基本功能。 1. 下载 MiniOB 代码,注意:这里请使用自己的私有仓库地址

git clone https://github.com/oceanbase/miniob.git
  1. 在 MiniOB 代码目录下,运行下面命令来编译 MiniOB
bash build.sh debug
  1. 进入 build_debug 目录
cd build_debug/
  1. 在 MiniOB 代码目录下,运行下面命令来启动 MiniOB
./bin/observer
  1. 打开另一个终端,进入 build_debug 目录,运行下面命令来启动 MiniOB client
./bin/obclient
  1. 在 obclient 中分别执行下面的 SQL 语句,并查看输出结果是否符合预期。
create table t1 (id int, name char(10));
insert into t1 values (1, 'hello');
select * from t1;

如果一切顺利,你的终端将会展示如下的结果:

$./bin/obclient 

Welcome to the OceanBase database implementation course.

Copyright (c) 2021 OceanBase and/or its affiliates.

Learn more about OceanBase at https://github.com/oceanbase/oceanbase
Learn more about MiniOB at https://github.com/oceanbase/miniob

miniob > create table t1 (id int, name char(10));
SUCCESS
miniob > insert into t1 values (1, 'hello');
SUCCESS
miniob > select * from t1;
id | name
1 | hello
miniob >

将代码提交到测试平台,并通过 basic 题目

测试平台中的 basic 题目是用来验证 MiniOB 的基本功能的(如创建表,插入数据,查询数据等),原始的 MiniOB 代码(不需要任何代码修改)就可以通过测试。你需要参考文档来将 MiniOB 代码提交到测试平台进行测试,并通过 basic 题目。至此,恭喜你已经顺利熟悉了开发环境和测试平台的使用。

注意事项

  1. 最重要的一条:请不要将代码提交到公开仓库(包括提交带有题解的 Pull Request),同时也请不要抄袭其他同学或网络上可能存在的代码。
  2. 实验题目都需要单人独立完成,不允许组队完成。
  3. 这门课程需要你有一定的 C++ 编程基础。
  4. 这门课程并不是关于如何使用数据库(例如如何写 SQL 语句,如何基于数据库构建上层应用)的课程。

C++ 编程语言学习

本门课程需要大家具备一定的 C++ 编程基础,这里推荐几个 C++ 基础学习的链接:

  • LearnCpp(可以作为教程)
  • Cpplings: src/cpplings/README.md(可以作为小练习)
  • cppreference(可以作为参考手册)