課程相關

課名:資料庫系統概論 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
成績分布: