Skip to content

Commit

Permalink
Add scoring critieria
Browse files Browse the repository at this point in the history
  • Loading branch information
hnjylwb committed Feb 26, 2024
1 parent 75235d3 commit 53bc409
Show file tree
Hide file tree
Showing 13 changed files with 48 additions and 15 deletions.
1 change: 1 addition & 0 deletions docs/common/advanced.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
高级功能满分为 3 分,即使你只完成了某个高级功能的一部分,也可以在报告中描述所做的工作,从而获得部分分数。
4 changes: 4 additions & 0 deletions docs/lab1/3-advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@
- 步骤 1:设计内存中的空闲空间数组,建议在 Table 中单独添加新的类用于管理空闲空间数组。

- 步骤 2:空闲空间数组的页面化管理,按照 TablePage 的思路设计新的页面结构。将空闲空间数组组织为页面格式进行存储,并在新建 Table 类后从文件导入。

{%
include-markdown "common/advanced.md"
%}
10 changes: 5 additions & 5 deletions docs/lab2/1-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

## 实验概述

本次实验为事务处理与故障恢复的实验,意图通过实现数据库日志机制和经典故障恢复算法来更好地理解数据库系统维持事务 ACID 特性的底层实现
事务处理和故障恢复是数据库系统的核心功能之一,它确保了数据库操作的原子性、一致性、隔离性和持久性,是数据库系统稳定高效运行的关键机制

事务处理事数据库系统最核心的功能之一。数据库系统必须保证事务处理的任意过程中意外的系统宕机不会影响事务的 ACID 特性,但出于性能因素考量的 steal+no-force 的脏页刷盘机制让故障情况下磁盘页面的数据违背原子性和持久性。此时,事务处理过程中的日志机制和故障后的恢复算法就起到了至关重要的作用。过顺序追加的日志记录和故障恢复算法对于页面状态的恢复在保证了系统高效性的同时维持了事务的正常运行
数据库系统必须保证事务处理的任意过程中意外的系统宕机不会影响事务的 ACID 特性,但出于性能因素考量的 steal+no-force 的脏页刷盘机制让故障情况下磁盘页面的数据违背原子性和持久性。此时,事务处理过程中的日志机制和故障后的恢复算法就起到了至关重要的作用。

日志格式的设计和故障恢复算法实现是本次实验的难点。日志设计上需要考虑自身保存的数据需要能够支持重做(Redo)或撤销(Undo)操作,并且需要兼顾存储空间和恢复速度(物理和逻辑日志的差异)。故障恢复算法则需要避免记录无用的日志记录以此来维持尽可能低的故障恢复时间。同时,日志和故障恢复的机制要求能覆盖系统在任意时刻宕机的异常情景。本次实验要求完成物理日志的设计和经典的 ARIES 故障恢复算法。
日志格式的设计和故障恢复算法实现是本次实验的重点。日志设计上需要考虑自身保存的数据需要能够支持重做(Redo)或撤销(Undo)操作,并且需要兼顾存储空间和恢复速度(物理和逻辑日志的差异)。故障恢复算法则需要避免记录无用的日志记录,尽可能降低故障恢复时间。同时,日志和故障恢复的机制要求能覆盖系统在任意时刻宕机的异常情景。本次实验要求完成物理日志的设计和经典的 ARIES 故障恢复算法。

![](../pics/lab2-overview.svg)

Expand Down Expand Up @@ -45,8 +45,8 @@
- [table](https://github.com/thu-db/huadb/tree/main/src/table):数据表相关类
- [table](https://github.com/thu-db/huadb/tree/main/src/table/table.h):在实验 1 的基础上添加记录变更时的日志记录功能。

基础功能需要补充约 200 行代码,本次实验依赖于实验 1,请确保完成以上任务再开始本次实验
基础功能需要补充约 200 行代码,本次实验依赖于实验 1,请确保完成实验 1 再开始本次实验

相关功能模块的抽象示意图如下
相关功能模块的示意图如下

![](../pics/lab2-details.svg)
4 changes: 4 additions & 0 deletions docs/lab2/3-advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@
- 步骤 1:修改 LogManager::Checkpoint 函数,修改 BeginCheckpointLog 和 EndCheckpointLog 的实现,确定 ATT 和 DPT 实际存储位置。

- 步骤 2:修改 LogManager 类,添加多线程检查点任务结束的异步通知机制,添加多线程情况下的检查点完成的处理函数。

{%
include-markdown "common/advanced.md"
%}
4 changes: 2 additions & 2 deletions docs/lab3/1-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@
- [update_executor](https://github.com/thu-db/huadb/tree/main/src/executors/update_executor.h):添加更新的写事务锁。
- [lock_rows_executor](https://github.com/thu-db/huadb/tree/main/src/executors/lock_rows_executor.h):添加行级别加锁保护功能。

基础功能需要补充约 100 行代码,本次实验依赖于实验 1 及实验 2 任务 1,请确保完成以上任务再开始本次实验
基础功能需要补充约 100 行代码,本次实验依赖于实验 1 及实验 2 任务 1,请确保完成上述任务再开始本次实验

相关功能模块的抽象示意图如下
相关功能模块的示意图如下

![](../pics/lab3-details.svg) |
4 changes: 4 additions & 0 deletions docs/lab3/3-advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@
- 步骤 1:为记录头添加版本链信息,从旧版本指向新版本。

- 步骤 2:修改记录扫描的逻辑,在扫描过程中回收无用的旧版本数据。

{%
include-markdown "common/advanced.md"
%}
6 changes: 3 additions & 3 deletions docs/lab4/1-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@
- [orderby_executor](https://github.com/thu-db/huadb/blob/main/src/executors/orderby_executor):排序算子,用于实现内存或外存的记录排序算法。
- [nested_loop_join_executor](https://github.com/thu-db/huadb/blob/main/src/executors/nested_loop_join_executor.h):Nested Loop 连接算子,用于实现最基础的连接算法。
- [merge_join_executor](https://github.com/thu-db/huadb/blob/main/src/executors/merge_join_executor.h):Merge 连接算子,要求底层算子节点已经完成排序,一种快速的连接算法。
- [hash_join_executor](https://github.com/thu-db/huadb/blob/main/src/executors/hash_join_executor.h)高级功能哈希连接算子,需要补充哈希组件后实现,一种快速高效的连接算法。
- [aggregate_executor](https://github.com/thu-db/huadb/blob/main/src/executors/aggregate_executor.h)高级功能聚合算子,依赖于哈希表结构,用于实现各类聚合算子的运算。
- [hash_join_executor](https://github.com/thu-db/huadb/blob/main/src/executors/hash_join_executor.h)(高级功能) 哈希连接算子,需要补充哈希组件后实现,一种快速高效的连接算法。
- [aggregate_executor](https://github.com/thu-db/huadb/blob/main/src/executors/aggregate_executor.h)(高级功能) 聚合算子,依赖于哈希表结构,用于实现各类聚合算子的运算。

基础功能需要补充约 200 行代码,本次实验依赖于实验 1,请确保完成以上任务再开始本次实验
基础功能需要补充约 200 行代码,本次实验依赖于实验 1,请确保完成实验 1 再开始本次实验

相关功能模块的抽象示意图如下:

Expand Down
2 changes: 1 addition & 1 deletion docs/lab4/2-basic.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

本次实验的目标比较明确,每次任务实现一个算子的 Next 函数,正确实现后便可通过该算子对应的测试。因此本次实验不再给出详细的实验步骤,你只需按照实验任务说明完成相应的算子即可。

基础功能中所有算子仅要求在内存中实现即可,如果你对外存算子的实现感兴趣,可以参考本次实验的高级功能
基础功能中所有算子仅要求在内存中实现即可,如果你对外存算子的实现感兴趣,可以参考本次实验的[高级功能](3-advanced.md)

## 任务 1:Limit 算子(3 分)

Expand Down
8 changes: 6 additions & 2 deletions docs/lab4/3-advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@

- 步骤 0:阅读教材相关算法的伪代码,理解内存算法和外存算法的实现差异以及查询代价差异。

- 步骤 1:拓展 BufferPool 功能,添加对于查询算子使用 BufferPool 的支持。
- 步骤 1:扩展 BufferPool 功能,添加对于查询算子使用 BufferPool 的支持。

- 步骤 2:修改查询算子的 Next 函数实现,并基于步骤 1 种拓展的 BufferPool 接口,通过缓存池实现内外存数据交互。
- 步骤 2:修改查询算子的 Next 函数实现,并基于步骤 1 中扩展的 BufferPool 接口,通过缓存池实现内外存数据交互。

## 任务 2:内存哈希连接与聚合算子(2 分)

Expand All @@ -25,3 +25,7 @@
- 步骤 1:设计哈希表,实现记录字段的哈希功能。

- 步骤 2:基于哈希表和哈希函数实现内存上的哈希连接算子以及聚合算子。

{%
include-markdown "common/advanced.md"
%}
2 changes: 1 addition & 1 deletion docs/lab5/1-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@

<!--TODO:添加Analyze相关函数-->

基础功能需要补充约 200 行代码,本次实验依赖于实验 1,请确保完成以上任务再开始本次实验
基础功能需要补充约 200 行代码,本次实验依赖于实验 1,请确保完成实验 1 再开始本次实验

相关功能模块的抽象示意图如下:

Expand Down
4 changes: 4 additions & 0 deletions docs/lab5/3-advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,7 @@
### 实现思路

修改数据库 Analyze 过程,在分析过程中使用 Count-Min 或 HyperLogLog 算法估计 distinct value。

{%
include-markdown "common/advanced.md"
%}
12 changes: 12 additions & 0 deletions docs/submit.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
## 评分说明

每次实验 20 分,五次实验共 100 分。

实验评测通过 GitLab CI 进行,每当你在 master 分支上 push 更新时,评测机会自动编译测试你的代码仓库。

每次实验的分数构成如下:

- (15 分)基础功能 CI 测试结果
- (2 分)实验报告
- (3 分)高级功能

{%
include-markdown "common/report.md"
%}
Expand Down
2 changes: 1 addition & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ nav:
- 实验概述: index.md
- 实验配置: prepare.md
- 实验框架介绍: overview.md
- 报告要求: submit.md
- 实验提交要求: submit.md
- "实验 1: 页面组织与缓存管理":
- 概述: lab1/1-intro.md
- 基础功能: lab1/2-basic.md
Expand Down

0 comments on commit 53bc409

Please sign in to comment.