# Intro to DBMS 2019 Final project :::danger Please don't ask something TA can find on the first page of Google Search results. If you really have no idea about what the keywords should be typed in search bar, please list the keywords you have tried 請不要在討論區詢問可以在Google Search結果第一頁找到答案的問題,如果你真的不知道要下什麼關鍵字,請列出你嘗試過的關鍵字 ::: :::info Template: Q: `What kind of problem you met?` * `What you have tried` A: `Solution` > `who anser the question (student id)` ::: ### We will use your participation here as a reference of bonus ### 我們將會參考在討論區的活動(回答)來當作加分參考 > (Except for LMGTFY related topics) > (但是 LMGTFY 的不會納入參考) ### Q0 How to search `something` using Google Search ### A0 http://bfy.tw/1yH > TA (0756000) --- ### Q1 請問這次作業有需要考慮filemode嗎? 如果要了話,like table應該要用甚麼格式存進檔案? >0410766 ### A1 不用 > TA --- ### Q2 測資最大會是什麼量級? 例如一百個還是一千個等等 ### A2 目前估計大概10萬筆 但如果大家的程式碼跑太慢會降低數字 --- ### Q3 助教您好!請問test/system/testcase/delete/t3.txt是不是應該在"insert"後面加上"into user"? 謝謝助教~ ### A3 已經加在patch-0.0.010了 > TA --- ### Q4 助教您好! 請問id有一定的範圍嗎? 另外會有 select count(*) from user join like on id = id1 where id2 = 20 的這種case嗎( 做join可是用另一個id做where)? 不好意思打擾了 謝謝助教~ ### A4 - 一樣用unsigned int就好,不會有overflow的問題 - where只要可以接受user table的column就好 > TA --- ### Q5 請問testcase中的 ```select count(*) from user join like on user.id = like.id2 where user.name = "Irina1"``` 和spec上的```select count(*) from user join like on id = id1 where age > 20``` 會同時出現嗎(tablename.attribute與attribute)? ### A5 抱歉我們忘記刪掉,等等會加patch,只會有下面那種query 已經加在patch-0.0.011了 > TA --- ### Q6 請問助教這次作業輸出的排序也是跟之前一樣 按照插入的順序嗎 那如果有join 就是先照table1的順序 再照table2的順序嗎 ### A6 Spec上有寫如果有用到join助教只會用count()來測試正確性,所以join時不用考慮順序的關係 >0410766 --- ### Q7 我在使用system_test.py的時候出現了如圖的錯誤,請問該如何解決呢? 網址:https://imgur.com/a/oro6dir ### A7 用`python3`試看看 >0410766 --- ### Q8 助教您好! 我更新patch_0.0.010~patch_0.0.012後 test/system/testcase/delete/t3.txt ``` insert into user1 "user1" "user1@example.com" 20 insert into user2 "user2" "user2@example.com" 23 insert into user3 "user3" "user3@example.com" 23 insert into user4 "user4" "user4@example.com" 25 delete from user where email = "user3@example.com" select * from user .exit ``` 好像在user和id間少了空白 另外hw2_hidden的測資,在拉了patch_0.0.012後多了"" 但answer部分好像沒有修改到 text/system/testcase/hw2_hidden/t2.txt ``` insert into user 1 "user1" "user1@example.com" 20 insert into user 2 "user2" "user2@example.com" 23 insert into user 3 "user3" "user3@example.com" 22 insert into user 4 "user4" "user4@example.com" 24 select email from user offset 1 limit 2 .exit ``` test/system/answer/hw2_hidden/t2.txt ``` (user2@example.com) (user3@example.com) ``` 還有join的測資 answer的部分好像有問題 test/system/answer/join/t2.txt 還有 test/system/answer/join/t3.txt 和t1.txt不一樣,最後好像少打了'\n' 好像會造成test判斷上的錯誤 我用generate_testcase.py生成的也有這個問題 打擾了,謝謝助教~ >0616309 ### A8 抱歉,如果有急切的需求,可以先自行修改測資內容 更新需要等明天助教才有空處理 > TA 已經更新在patch 10 12 13三個裡面囉 --- ### Q9 請問助教 這次的作業還需要能夠通過上次的unit test嗎 應該是不用(?) ### A9 不用 > TA --- ### 續Q7 助教你好 改成python3之後還是有一樣的問題出現? ![](https://i.imgur.com/zQrC5wI.png) ### A 先make看看呢 可以了! 感謝幫忙~ --- ### Q10 助教您好,我想要請問在測速度的地方如果出來的結果是錯的,那這部分的時間會怎麼算?還有測速度的testcase是不是只會用generate_testcase.py這個檔案來生成,測速度或測速度以外的時候還會有hidden test嗎?謝謝助教 ### A10 如果答案錯誤就不會有速度的評分 然後測速度只會用generate_testcase.py生成測資 hidden test一樣會有 但速度測試不會有hidden test --- ### Q11 助教您好,關於generate_testcase.py裡面join的部分是user.id = like.id1/like.id2還是id = id1/id2呢?還有輸出是(數字)'\n'還是(數字),generate_test.py產生的測資好像跟spec不一樣!? ### A11 加上patch 10 12 13之後還是這樣嗎? Re A11 還是沒有解決問題 請加上patch 11 --- ### Q12 請問 Query optimization 的時間測試是只有用助教給的 `generate_testcase.py` 才會計時, 還是全部的 system testcase 都會計時 ### A12 前者 --- ### Q13 請問, 對於下面兩種類型的 query ``` select id, name from user offset <offset num> limit <limit num> select name, age from user where age <= {upper} and age >= {lower} ``` 輸出的順序一定要按照 insert 的順序嗎? 能不能按照 age 排序? ### A13 要照著insert順序 --- ### Q14 請問Query optimization的測資query只會有一筆嗎? 因為只要讀一次就可以完成query 造成執行時間會有多數都是取決於輸入與輸出, 產生與其優化 query 方式不如去優化 I/O 還比較有效果的壯況 建議 query 筆數的量級需要與 insert 筆數接近, 例如 50000 筆 insert + 50000 筆 query, 這樣才不會造成 query 時間 O(1) 的程式與 query 時間 O(n) 的程式執行時間幾乎沒有差異。例如輸入有 n 筆insert與 n 筆 query, O(1) 完成 query 的程式總體時間大約就是 O($n$+預處理所需時間), 而 O(n) 進行 query 的程式的總體時間會是 O($n^2$+預處理所需時間) 補充: 如果測試資料是先連續 n 個 insert, 再續 n 次 query, 其實也還是會有 I/O 時間佔一半以上的執行時間的問題。因為資料是先全部 insert 完再進行 query, 存在簡單的方法先用 O(n) 進行完預處理, 每個 query 用 O(1) 時間完成, 總體時間還是 O(n)。 因為 I/O 時間量級與總體時間量級相同, 而且 I/O 的常數往往比執行運算的常數還大, 所以 I/O 還是會占用約一半以上的時間。可能的解法是讓 insert / query 會交替進行, 增加每個 insert / query 的理論執行時間下界, 這樣才能真正比較到底是 query 寫的好還是只是 I/O 的速度差異 --- ### Q15 助教好,看到select指令的格式中,table1可以是like或user;table2也可以是like,想請問會不會有like join like這種情況呢?感覺上沒有什麼實質意義.... ### A15 spec 有說只會有uesr join like的情況,也就是說只會有 id = id1 或 id = id2 > 0616014 抱歉我眼幹QQ ### Q16 助教我想請問: join 的 t1.txt: select count(*) from user join like on user.id = like.id2 where user.name = "Irina1" 和 join 的 t2.txt: select count(*) from user join like on user.id = like.id2 where age < 20 中的where 一個是user.name 一個是沒有user. 請問哪個才是正確的,還是兩種都要處理? ### A16 加上patch-0.0.011試看看 >0410766 answer: ![](https://i.imgur.com/itJ8RKw.png) output: ![](https://i.imgur.com/ven2H16.png) 原本的aggregation測資答案要換行,但是產生出來的large測資答案卻不用換行,想問哪個是正確的? 以及要如何得知large這部份的測資跑多久? ### A 時間可以先試看看這個`time ./shell < test/system/testcases/large/t1.txt > /dev/null` 換行的部分我看助教寫的python檔案有加換行,可能是編輯器自動隱藏了最後一行[參考資料](http://landcareweb.com/questions/36734/wei-shi-yao-gedithe-vimhui-yin-cang-yong-hu-de-zui-zhong-huan-xing-fu),所以看起來像是沒換行 >0410766 謝謝你,我試試 ### A15 需要有換行 如果你是用git抓patch請每個patch依序加上 如果不是用git請你複製檔案中有修改的部分就好 不要複製整個檔案 --- ### Q16 助教好,spec上說update只有user會用到,想請問會測試table名錯誤的情況嗎,例如update like set ... 上次沒有測錯誤測資 這次應該也沒有 >0410779 ### A16 不會唷 > TA --- ### Q17 助教您好,在做join的時候一定都是先insert完user的部分再insert like的部分嗎? ### A17 會按照`generate_testcase.py`的順序 > TA --- ### Q18 助教好,想請問Join的時候只會出現一個count()嗎,還是會有select count(*), count(id)這種情況。 ### A18 一個 > TA --- ### Q19 助教好! 想請問作業一個人交就好了齁? 然後最後統一會用哪個patch中的.py檔測試,想請教一下? ### A19 - 一個人交就好,壓縮檔名請寫上group ID,如`01.zip` - 不是用單一的一個patch是要把patch全部加到master裡面 > TA 抱歉助教考完試頭昏腦脹弄錯了 是group id沒錯 > TA --- ### Q20 上面有同學提到換行的問題,想請問最後測資會怎樣?會不會因為有沒有換行而fail拿不到分數? ### A20 請先加上patch 11再看看有沒有問題 ### Re20 我們在抓patch的時候,再抓完前幾個再抓後面的patch的時候會有error耶 就會patch失敗,請問是全部的patch都去抓嗎,還是我先抓patch11去測空行問題就可以了? ### A20 前面幾個是哪幾個? 到哪一個壞掉的? 麻煩提供詳細一點的資訊 --- ### Q21 請問助教我發現如果patch按照10,11,12,13的順序會有error,而如果我反過來從13,12,11,10的順序不會有error,請問順序會影響果正確與否嗎? ### A21 如果你是用git來加上的話"應該"沒問題 如果你是手動複製貼上的話應該會有問題 --- ### Q22 助教不好意思,我不太會用patch所以都手動改測資錯的地方,想請問join的answer有需要再加個換行嗎?看上面還是不太清楚需不需要。 ### A22 手動的話 只需要複製有修改到的地方就好 整個檔案都複製會出錯 --- ### Q23 助教好,我在執行python test/system/generate_testcase.py的時候顯示"No module named pandas",下指令pip install pandas安裝後還是顯示一樣的訊息,請問要怎麼解決呢? 謝謝 ### A23 用`python3`和`pip3`看看 >0410766 記得看一下自己現在python的版本是什麼? >0410779 --- ### Q24 助教好,請問like裡面的可能會有重複的entries嗎? 如果有的話要處理distinct嗎? 不用八,一個人可以喜歡很多人啊qq 至少我用重複的情形測資都對啦 >0410779 id1 Unique, id2 may not unique >0410766 我想問有沒有兩筆(id1=3, id2=4)之類的情況ˊˋ >0616015 根據Spec不會有兩筆id1相同的Like資料 ![](https://i.imgur.com/jFkedzV.png) >0410766 喔喔感謝QQ >0616015 --- ### Q25 和Q1相關 請問`large`的資料數量最多就是10萬嗎,是不是只會更少不會更多? 如果會更多的話最多到幾筆資料呢? ### A25 不會更多 > TA --- ### Q26 助教您好,請問在這次作業中我們是不是可以直接忽略HW3的string_bonus這項測資的fail spec 上說不用 ![](https://i.imgur.com/27JWggm.png) > 0411081 --- ### Q27 請問Large的測資 要不要換行? 產生的answer是沒有換行的 要手動在answer增加換行嗎? 用patch13的generate_testcase.py就會換行了 >0410779 ### Q28 請問select的sum, avg, count有要支援like這個table嗎? ### A28 不用 > TA --- ### Q29 patch13的delete測資第3題是不是沒改到? 而且到底有沒有user.name阿 ### A29 - delete的在patch10 - Spec裡有說不用註明table名字 > TA --- ### Q30 為什麼patch11改過的join測資,到patch13又回復成之前錯誤的格式了 建議助教可以講一下要用哪個patch的測資或程式算分數,這樣繳交作業前能夠做最後確認也比較心安 另外generate_testcase.py所產生的large裡面也有user.id = like.id2的問題 ======== patch13應該沒有動到user.id這個部分吧,助教沒有把patch merge回master,所以你要自己把所有patch都上過 也就是說不是用哪個patch 而是要用master + patch11 + patch12 + patch13 的結果 >0611262 ### A30 對 如上面同學所說 patch是獨立分開的 你得在master每一個都加進去 如果不會git就每個patch都複製修改到的那幾行就好 不要複製整個檔案 > TA --- ### Q31 請問這次作業佔總成績多少?我們想放暑假QQ 作業50% 考試50% 所以應該四次作業(作業1,2,3,final) 各占12.5%吧 姑且還是做一下啦QQ >0410779 ### A31 助教也想放暑假阿... 我們是怕你們期末考周沒時間寫才多這幾天的 > TA --- ### Q31 請問助教,測試的時候IO跟Query的次數的比例是多少呀? 如果Query只跑個幾次,那Query的優化就變得不是那麼重要了耶(以C語言的速度來看) 所以就像Q14說的,是不是應該IO次數跟Query次數相當比較合理呢? 根據generate_testcase.py就是很多個insert接一個query了,應該不可能在最後一天改testcase,那我們就只好來優化其他地方了 >0611262 > ### Q31 親愛的同學: 學期已經結束了,你現在一定很忙碌於還上個學期Deadline作業的債,加油!加油!然而,我們還是要請你上網填寫每一門課的助教評量問卷。抱歉佔去你寶貴的時間,但是你的意見與回饋對助教來說是很重要的,因為這樣助教們才能改進作業的鑑別度,所以請你務必要耐心、中肯、公平且公正的填答,並提出你對助教的建設性建議。你作答的資料,學校絕對會予以保護。感謝你的幫忙! https://tasurvey.nctu.edu.tw/index.asp 祝同學們 身體健康 學業進步 ### Q32 請問助教 我遇到了HW3討論區中Q83的問題 就是手動輸入測資是對的 但是用程式去餵測資卻幾乎全錯 仔細看output的結果發現常常出現連續好幾個空白的() 請問這有解決方法嗎QQ ### RE32 沒事了我自己知道錯在哪兒了 --- ### Q33 真的,慢根本就是慢在IO。所以Query Optimization完全沒有意義的。 請大家往其他方面去優化。 --- ### Q34 在large測資中,遇到答案(output的檔案跟answer相符)正確,可是在system_test.py卻噴出timeout並且報failed,請問這是應該要被正視的問題嗎? 就跑太慢,這次作業的重點就是要跑得快,要記得優化 >0410779 應該說想知道這個部分會不會被扣到optimization以外的部分 ### A34 不會,我們會另外寫程式測時間,所以只有優化IO的注意囉 > TA --- ### Q35 想問助教會出現`select id1, id2 from user`或`select id, email, name, age from like`這種測資嗎? ### A35 不會出現這種有明顯錯誤的 > TA > --- ### Q36 接續A34 請問只優化IO的要注意什麼 你們重寫的程式會去掉IO的時間嗎 是會讀我們的code 只計時Query的部分?? 還是測資會跟generate_testcase.py不一樣? ### A36 測資一樣,只是會分開算insert跟select 兩邊都會算時間,insert也是query的一種啊 > TA --- 那最後比的是insert時間 + select時間? 還是有不同權重 如果直接加起來那分開算要幹嘛? 不同權重,加起來的是指跑1-3次加起來,不要誤會 > TA ### Q37 有點混亂,所以最後測試的時候是拿large裡面的t1到t5直接丟進去當input嗎 ### A37 是,只是中間算時間的部分是分開算 > TA --- ### Q38 對於助教的計時標準有蠻大的疑惑, 想問2個問題 1. 請問如果是把 input 全部都讀完 (讀到 EOF) 才開始一次處理全部的 query, 也就是用 off-line 的方式回答 query, 不是 interactive 式的, 助教的計時程式是否可以正常執行? 3. 對於 A34, A36 回覆的另一種理解, 是不是說會把同一份測試資料先用只有 insert 的跑一次, 再用有 insert 跟 select 的測一次時間, 然後相減當作 select 的時間進行比較? ### A38 1. 我想是不行 2. 你可以理解為我測large時會不停丟query進去,丟完insert按一次碼錶,丟完select再按一次碼錶 > TA ### Q38.2 所以如果我是用 off-line 的寫法, 是不是要重寫了QQ? ### A38.2 我不敢斷定 > TA --- ### Q39 所以根據Q38.1的答案 就算使用`python3 test/system/system_test.py` 測出來是會過的,在你們神奇的新程式也不保證會過嗎? ### A39 我不知道你過的定義是甚麼,跑過system test代表你有正確性的5分,再來時間是用另一個去測 > TA ### Q39.1 我的意思是 假設你們測時間的那隻程式用的`t1.txt t2.txt t3.txt t4.txt t5.txt` 複製到給`system test` 會pass 這樣 ### A39.1 會 > TA ### Q39.2 所以必須自己寫交叉insert 和 select的指令囉QQ ### A39.2 本來就應該可以這樣 > TA --- ### Q40 請問可以提供一下測時間的程式嗎 我們怕我們優化的東西會因為用不同東西測而爛掉 ### A40 只要你的large用system test答案對,可以**正常**的用interactive的方法執行,就不會有問題 > TA --- ### Q41 請問join如果支援不只count的話有加分嗎? ### A41 不會,已經有太多加分的地方了 > TA --- ### Q42 這次spec上說資料夾結構要長這樣 ``` 01.zip (group_ID.zip |--include | `--*.h (all the header files |--src | `--*.c (all the source files `--Makefile ``` 不過以往都是zip裡面還有一個資料夾之後才是MakeFile 例如HW3的長這樣 ``` 0123456.zip (studentID.zip `--0123456 (this is your project folder |--include | `--*.h (all the header files |--src | `--*.c (all the source files `--Makefile ``` 這是打錯了還是這次比較特別 ### A42 沒有打錯 > TA --- ### Q43 請問這次也不用看make check嗎? ### A43 對 不需要 > TA --- ### Q44 請問測時間的時候會用 .output 嗎,因為如果是直接用 `./shell < large/t1.txt` 的話會出現一堆 db> 然後就要噴很久。 ### A44 會喔 原本在system test裡面就會自動加上.output了 > TA