【修課心得】資料庫系統概論 吳尚鴻
國立清華大學 資訊工程學系
課名:資料庫系統概論 Introduction to Database Systems
科號:CS 471000
老師:吳尚鴻
課本:教授自編講義
課別:資工系選修D類
學分:3
涼度:★★★(滿分五分,空心代表半分)
甜度:★★★★★(滿分五分,空心代表半分)
建議先修課程:
作業系統
課程內容\簡介:
一開始教如何使用 DB,後面主要在講普遍 DB 內的架構。期中考後為補充內容,介紹像是分散式資料庫、NoSQL資料庫、Vector search等等。
教學進度如下:
L0 Introduction
L1 Using a DBMS
L2 Data Modeling
L3 Architecture and Interfaces
L4 Server and Threads
L5 Query Processing
L6 Data Access and File Management
L7 Memory Management
L8 Record Management
L9 Transaction Management Part I : Concurrency Control
L10 Transaction Management Part II : Recovery
-- 期中考分隔線 --
L11 Query Optimization
L12 AI & Vector DBMS
L13 Cloud Database
L14 Trade-Offs and NoSQL
上課方式:
實體授課,老師以前有錄教學影片放在 YouTube,但我沒看過,因此不知道影片與上課內容的差異。
上課分為禮拜二的教師課與禮拜四的助教課。
教師課講解上面提到的 topic,前期教一些基本概念;中期以老師實驗室自己開發的教學用 DB(以下將以 VanillaDB 代稱) 為範例,講解資料庫的架構與設計,此部分牽扯到很多 OS 的概念(上課時會用到,但作業不太需要),因此推薦修過 OS 再來會比較跟得上老師的速度,因為老師授課時是基於大家都有這些基本概念在講解的。
另外想提的是,我在修課前以為在課堂中會學到的是類似 OS 教的那種亙古不變的基本概念,可以用在任何地方,然而資料庫是一個應用,其中有很多特化的作法,所以上課教的就是 focus 在資料庫的部分,學到的概念較無法應用在其他領域,不過這些概念還是非常有趣,像是如何 ensure ACID 等等。
期中考約在 12 周前後,期中考過後的教學內容就是完全補充,教一些資料庫的應用等等。
禮拜四的助教課助教會上台講解作業相關的問題或者 VanillaDB 相關的實作,但與其上課聽助教說個大概,我會覺得回家 trace code 比較能詳細了解架構。
作業:
小組作業共5次,一組3~4人。
作業評分為 2 phase:phase 1 為 coding,依照助教的 spec 寫出相應的功能後用 gitlab 繳交,此部分與 OS 的 NachOS 作業滿像的,另外部分作業需要做實驗比對優化前後的差異,寫進 phase 1 report 中;phase 2 時助教會 release 他們的做法,而學生要對比 2 份 code 的差異,再寫一份 report。
phase 1 的 coding 普遍不難,且又是小組作業,所以其實這堂課滿涼的,一個人要負責的內容非常少,可能不像大家對吳尚鴻老師課程的印象。report 的部分寫自己的實作跟做一些實驗,相對很花時間(實驗超躁的)。
phase 2 沒甚麼好說的,就是做一個簡單的比照。
作業評分部分我有些怨言。
1. 助教從不說明清楚作業的評分規則,在作業批改完畢後才發現有組別似乎實驗做得特別詳細而被加分,我可以理解看到優秀的 report 會想加分,但我想這件事應該要一開始就說明清楚,而不是在學生看到有人作業成績破百後去詢問才知道。
2. 作業成績批改非常之緩慢,作業1, 2的成績直到二退前幾天才批改完畢,作業3, 4, 5直到送成績前才公布,當我們發現前面的作業有部分沒有符合助教的要求時,後續可能又過了幾次作業,導致很難取得 feedback,也不知道怎樣的作業才可以拿到高分,而助教又不公布詳細評分規則,整體而言讓我感到這堂課的評分似乎很隨便。另外,作業的扣分原因也不會說明,要自己去問才知道。
考試:
考試共2次,分為期初考與期中考,紙筆測驗。
期初考時間在開學第二周,考 Java concurrency & SQL,滿簡單的,雖然時間緊迫,但基本上只要有準備都可以很高分,而且滿分破百,我覺得不用擔心這部分(不過有用到不少 OS 的概念,或許還是要有修過 OS 才會比較輕鬆)
期中考約在第12周,考試多為課程講義內容,考題方向很像 OS,只要把講義讀熟就可以拿到高分(同樣滿分破百)。
總而言之,這堂課的考試壓力不大,期初考約準備3, 4天,期中考大約一個禮拜將講義讀熟就好,且考試占比低,只有15%,考差了也不會過於影響總成績。
Final project:
修改 VanillaDB 以支援 vector search。
這個 Final project 有很多地方很混亂,像是:
1. 沒有同一環境,卻要求要在絕對時間(30 mins)內執行完畢。
2. 正確性為評分的部分,然而在助教計算正確性的 code 中卻有 bug。
3. Throughput 也是評分的部分,同樣在助教的 code 中有 bug。
4. Baseline 要實作 SIMD,然而 Java 本身就有相關優化,做了反而效能下降。
以工作量來講 Final project >> 前面幾次作業,但也不是非常累,以一堂資工系的 Final project 來講,我認為這樣的 workload 挺合適(可能是被 ML 要做一個學期的 Final project 過度摧殘了哈哈哈)。
前面幾次的作業不太會扣到幾分,我主要的分數都扣在 Final project
結論:
一堂 loading 比想像中輕非常多的課,在課堂中也能學習到很多東西,且因為會用到 OS 的概念,我個人滿推薦三下來修。評分部分我個人頗有微詞,但如果,如果,如果撇除沒說明清楚的評分規定,分數是很甜沒錯。
甜度的話我會給滿,基本上就是有好好準備考試,好好寫作業,都可以A+的課。
另外,包含吳尚鴻老師的軟實,是不是老師的課程評分規則(或者 Spec 規定不清)都這麼躁,雖然最後結果很甜,但修課期間真的會感到很不悅。
給分:
Assignment 5次 50% +
期初考 15% +
期中考 15% +
Final Project 20%
= 100%
上課回答問題老師會看情況加分,至少加總成績1分以上。
老師的喜好、個性:
帥氣型男老師,老師懂非常多東西,知識淵博。上課輕鬆幽默,喜歡學生跟他互動,教學非常順暢,就像是4090在跑一樣完全不卡頓。每堂課都能深切的感受到老師的熱忱,還記得當年清華炸彈危機時,教室外響起巨響,老師頓了一頓後說道:我捨命,你隨意,要走的可以走。甚是瀟灑。
加簽:
不太清楚規定。
總成績/班上排名:96(A+) 4/47
T分數:61.26
成績分布:
By 電眼蟀哥