2025年數(shù)據(jù)庫原理及應(yīng)用期末考試試題及答案_第1頁
2025年數(shù)據(jù)庫原理及應(yīng)用期末考試試題及答案_第2頁
2025年數(shù)據(jù)庫原理及應(yīng)用期末考試試題及答案_第3頁
2025年數(shù)據(jù)庫原理及應(yīng)用期末考試試題及答案_第4頁
2025年數(shù)據(jù)庫原理及應(yīng)用期末考試試題及答案_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2025年數(shù)據(jù)庫原理及應(yīng)用期末考試試題及答案一、單項選擇題(每題2分,共20分)1.在關(guān)系數(shù)據(jù)庫中,若屬性集X→Y且Y→Z,則下列說法正確的是A.一定存在X→ZB.可能存在X→ZC.一定不存在X→ZD.以上都不對答案:B解析:函數(shù)依賴具有傳遞律,但需滿足Y不包含于X且Z不函數(shù)依賴于X的直接依賴,故僅“可能”成立。2.某表R(A,B,C,D)滿足FD集F={A→B,B→C,C→D},則該關(guān)系最高屬于A.1NFB.2NFC.3NFD.BCNF答案:C解析:存在傳遞依賴A→B→C→D,主鍵為A,無部分依賴,故達3NF但未達BCNF。3.在MySQL8.0中,執(zhí)行語句SELECTFROMtWHEREa=1ANDb>2ORDERBYcLIMIT5;最優(yōu)索引是A.(a)B.(b)C.(a,b,c)D.(c,a,b)答案:C解析:等值過濾在前、范圍過濾在中、排序字段緊隨,復(fù)合索引(a,b,c)可完全利用最左前綴并避免額外排序。4.兩階段封鎖協(xié)議(2PL)能保證A.避免死鎖B.避免級聯(lián)回滾C.可串行化D.以上全部答案:C解析:2PL通過加鎖階段與解鎖階段分離保證可串行化,但不保證死鎖與級聯(lián)回滾的避免。5.在分布式數(shù)據(jù)庫中,采用“最后寫入獲勝”策略解決副本沖突時,必須依賴A.全局事務(wù)IDB.向量時鐘C.物理時鐘同步D.邏輯時鐘答案:C解析:LWW需比較各節(jié)點物理時間戳,故要求時鐘同步精度高于寫入間隔。6.關(guān)于PostgreSQL的MVCC,下列說法錯誤的是A.更新操作實際插入新元組B.刪除操作僅設(shè)置xmax標記C.事務(wù)ID回卷后必須凍結(jié)元組D.每個元組頭部保存事務(wù)開始與結(jié)束時間答案:D解析:元組頭部保存xmin/xmax事務(wù)ID而非時間戳,D混淆了實現(xiàn)細節(jié)。7.在MongoDB分片集群中,chunk遷移的觸發(fā)條件不包括A.寫入負載熱點B.chunk大小超過閾值C.分片間chunk數(shù)量差異超過遷移閾值D.查詢路由緩存失效答案:D解析:查詢路由緩存失效影響定位性能,但不直接觸發(fā)遷移。8.某銀行系統(tǒng)采用Redo+Undo日志,崩潰恢復(fù)時首先A.從檢查點開始正向掃描RedoB.從檢查點開始反向掃描UndoC.重放所有Redo再按活躍事務(wù)列表UndoD.隨機順序應(yīng)用Redo與Undo答案:C解析:ARIES算法先重做歷史,再撤銷未提交事務(wù),保證一致性。9.列式存儲相對行式存儲在OLAP場景下的主要優(yōu)勢是A.提高點查效率B.降低CPU使用率C.提高壓縮比與批量掃描性能D.簡化事務(wù)并發(fā)控制答案:C解析:列存同質(zhì)數(shù)據(jù)連續(xù)存放,壓縮比高且僅讀取所需列,顯著減少I/O。10.在Redis中,執(zhí)行MULTI;INCRk;DECRk;EXEC;若k初始為0,則最終k值為A.0B.1C.-1D.事務(wù)回滾答案:A解析:Redis事務(wù)順序執(zhí)行,INCR后k=1,DECR后k=0,無回滾機制。二、填空題(每空2分,共20分)11.關(guān)系R(教師號,課程號,教室號,上課時間),若每位教師在同一時間只能在一個教室上課,則存在的函數(shù)依賴為________。答案:教師號上課時間→教室號12.在SQL標準中,隔離級別________允許出現(xiàn)幻讀但禁止不可重復(fù)讀。答案:READCOMMITTED13.當(dāng)B+樹節(jié)點大小為4KB、指針占6B、鍵值占10B時,每個非葉節(jié)點最多可存儲________個鍵值。答案:255解析:?(4096?6)/(10+6)?=25514.采用位圖索引時,若某列基數(shù)為5000、表行數(shù)為1億,則位圖索引總大小約為________GB。答案:≈5.82解析:1×10^8×5000bit÷8÷1024÷1024÷1024≈5.82GB15.在SparkSQL中,將DataFrame緩存至內(nèi)存并采用序列化存儲的函數(shù)為________。答案:persist(StorageLevel.MEMORY_ONLY_SER)16.若事務(wù)T1對A加S鎖,T2對A加________鎖時不會阻塞。答案:S17.在MySQLInnoDB中,系統(tǒng)表空間文件默認名稱是________。答案:ibdata118.當(dāng)使用兩副本機制時,系統(tǒng)允許同時故障的節(jié)點數(shù)最多為________。答案:119.在Elasticsearch中,一個索引默認被分成________個主分片。答案:120.根據(jù)CAP理論,當(dāng)網(wǎng)絡(luò)分區(qū)發(fā)生時,分布式系統(tǒng)必須在________與________之間做出選擇。答案:一致性、可用性三、判斷題(每題1分,共10分,正確打“√”,錯誤打“×”)21.任何二元關(guān)系模式必定屬于BCNF。答案:√解析:二元關(guān)系只有兩個屬性,決定因素必為超鍵。22.在哈希索引中,范圍查詢比等值查詢更高效。答案:×解析:哈希索引不支持區(qū)間掃描。23.快照隔離級別下不會出現(xiàn)LostUpdate。答案:×解析:快照隔離允許First-commit-wins,但應(yīng)用層未檢測時仍可能LostUpdate。24.在Oracle中,表空間可以跨多個數(shù)據(jù)庫實例共享。答案:×解析:表空間屬于單個實例,RAC中各節(jié)點共享存儲但表空間仍歸一個數(shù)據(jù)庫。25.使用覆蓋索引可以避免回表操作。答案:√26.在MongoDB中,嵌套文檔大小限制為16MB。答案:√27.分布式事務(wù)的2PC協(xié)議在協(xié)調(diào)者崩潰后可能出現(xiàn)阻塞。答案:√28.列式存儲引擎不適合高并發(fā)單行更新場景。答案:√解析:列存更新需重寫整個列塊,代價高。29.在PostgreSQL中,觸發(fā)器只能在表級定義,不能在視圖級定義。答案:×解析:INSTEADOF觸發(fā)器可定義在視圖上。30.圖數(shù)據(jù)庫的鄰接索引主要用于加速屬性過濾。答案:×解析:鄰接索引用于遍歷邊,而非屬性過濾。四、簡答題(每題8分,共24分)31.描述InnoDB插入緩沖(ChangeBuffer)的合并過程,并說明其對性能的影響。答案:(1)當(dāng)二級索引頁不在緩沖池時,InnoDB將記錄插入、更新、刪除操作緩存到ChangeBuffer,避免立即隨機I/O。(2)后臺線程定期或當(dāng)頁被讀入緩沖池時,將變更合并到真正的索引頁,稱為merge。(3)合并過程包括:讀取磁盤頁、應(yīng)用緩沖中的條目、寫入臟頁、刷盤。(4)性能影響:?a.寫操作延遲降低,吞吐量提升;?b.合并階段可能引發(fā)突發(fā)I/O,需通過參數(shù)innodb_io_capacity限制;?c.極端寫密集場景下,ChangeBuffer過大可能占用大量緩沖池,擠占數(shù)據(jù)頁,需監(jiān)控Pages_made_young與Pages_read。32.對比LSM-Tree與B+Tree在寫放大、讀放大、空間放大三個維度的差異,并給出適用場景建議。答案:寫放大:LSM-Tree將隨機寫轉(zhuǎn)為順序?qū)懀瑢懛糯蟆謑ogN(level數(shù)),遠低于B+Tree的分裂級聯(lián)寫。讀放大:LSM-Tree需多層合并查找,讀放大高;B+Tree樹高通?!?,讀放大低??臻g放大:LSM-Tree因未立即回收舊記錄,空間放大高,需定期壓縮;B+Tree原地更新,空間放大低。適用場景:?寫密集、寫延遲敏感、讀近期數(shù)據(jù)——LSM-Tree,如HBase、RocksDB;?讀密集、范圍掃描多、事務(wù)復(fù)雜——B+Tree,如InnoDB、PostgreSQL。33.解釋PostgreSQL中“事務(wù)ID回卷”問題的產(chǎn)生原因及凍結(jié)(Freeze)機制。答案:PostgreSQL使用32位遞增事務(wù)ID,最大約42億。當(dāng)最新XID與最舊XID差值超過2^31時,會誤認為舊事務(wù)屬于未來,導(dǎo)致數(shù)據(jù)不可見。凍結(jié)機制:(1)vacuum進程掃描表,若元組xmin早于vacuum_freeze_min_age,則將其標記為“frozen”,重寫為特殊XID(2)。(2)凍結(jié)后元組對所有事務(wù)可見,消除回卷風(fēng)險。(3)自動參數(shù)autovacuum_freeze_max_age強制觸發(fā)vacuum,確保在達到回卷閾值前完成凍結(jié)。(4)若回卷即將發(fā)生,數(shù)據(jù)庫將拒絕新事務(wù)并進入“緊急vacuum”模式,嚴重影響可用性,故需監(jiān)控pg_stat_progress_vacuum。五、綜合設(shè)計題(共26分)34.某社交APP需設(shè)計“用戶關(guān)注”功能,需求如下:?a.用戶量10億,平均關(guān)注500人;?b.讀寫比例約1:1,讀要求<50ms,寫要求<200ms;?c.支持按時間順序拉取關(guān)注列表、反向查詢粉絲列表;?d.支持關(guān)注與取消關(guān)注冪等;?e.需水平擴展,單節(jié)點故障不丟數(shù)據(jù)。(1)給出邏輯模型與主鍵設(shè)計(4分)答案:表follow(follower_idbigint,followee_idbigint,tstimestamp,primarykey(follower_id,followee_id));表fan(followee_idbigint,follower_idbigint,tstimestamp,primarykey(followee_id,follower_id));雙表互為反向索引,確保雙向查詢高效。(2)選擇存儲引擎并說明理由(4分)答案:采用TiDB(MySQL協(xié)議+分布式KV)。理由:?a.自動水平分片,支持海量數(shù)據(jù);?b.分布式事務(wù)滿足冪等寫入;?c.二級索引可覆蓋follower→followee與followee→follower;?d.多副本Raft保證單節(jié)點故障RPO=0。(3)給出高并發(fā)寫入時的優(yōu)化策略(6分)答案:?i.客戶端批量聚合100條關(guān)注請求,降低網(wǎng)絡(luò)RTT;?ii.采用insertonduplicatekeyupdate實現(xiàn)冪等,避免唯一沖突重試;?iii.啟用TiDB的悲觀鎖批量模式,減少鎖沖突;?iv.按follower_id哈希預(yù)分區(qū)256Region,避免熱點;?v.寫操作異步下沉Kafka,再流式寫入,削峰填谷;?vi.監(jiān)控Regionwrite-hotspot,自動分裂與調(diào)度。(4)設(shè)計緩存方案并說明一致性保障(6分)答案:?a.采用RedisCluster,按follower_id分16384槽;?b.緩存結(jié)構(gòu):String鍵follow:list:{follower_id},值采用壓縮列表編碼,存儲最近1000個followee_id與ts;?c.寫路徑:成功寫入TiDB后,發(fā)布binlog至Kafka,消費組更新Redis,采用del+lpush保證順序;?d.讀路徑:緩存命中直接返回,miss則回源TiDB并回寫Redis,設(shè)置隨機過期5–10min;?e.一致性:容忍短時間臟讀,通過設(shè)置過期+異步刷新,最終一致;?f.使用Redlock防止并發(fā)回源擊穿。(5)估算存儲成本并給出壓縮方案(6分)答案:?數(shù)據(jù)量:10億×500×2(雙向)×(8+8+4)≈74TB原始行;?TiDB默認壓縮算法LZ4,壓縮比約4:1,磁盤約18.5TB;?三副本總磁盤55.5TB;?采用ZSTDlevel3,壓縮比提升至5.5:1,磁盤降至40TB;?冷熱分離:90天前數(shù)據(jù)移至S3+ZSTD,節(jié)省70%成本;?Redis緩存1000條×10億×(8+4)=12GB,采用list-pack編碼壓縮至8GB,內(nèi)存成本約200美元/月。六、SQL編程題(共20分)35.現(xiàn)有訂單表order(oidintprimarykey,uidint,amtdecimal(10,2),statuschar(1),create_timedatetime,index(uid,create_time)),其中status∈('P','S','F')分別代表待支付、成功、失敗。要求:?a.查詢近30天成功訂單數(shù)、成功金額、客單價,無數(shù)據(jù)補0;?b.按天分組,輸出格式:dt,succ_cnt,succ_amt,avg_amt;?c.禁止使用子查詢,須單條語句完成;?d.MySQL8.0+語法。答案:SELECTdates.dt,COALESCE(stats.succ_cnt,0)ASsucc_cnt,COALESCE(stats.succ_amt,0)ASsucc_amt,IFNULL(stats.succ_amt/NULLIF(stats.succ_cnt,0),0)ASavg_amtFROM(SELECTDATE(DATE_SUB(CURDATE(),INTERVALseqDAY))ASdtFROM(SELECT0seqUNIONSELECT1UNIONSELECT2UNIONSELECT3UNIONSELECT4UNIONSELECT5UNIONSELECT6UNIONSELECT7UNIONSELECT8UNIONSELECT9UNIONSELECT10UNIONSELECT11UNIONSELECT12UNIONSELECT13UNIONSELECT14UNIONSELECT15UNIONSELECT16UNIONSELECT17UNIONSELECT18UNIONSELECT19UNIONSELECT20UNIONSELECT21UNIONSELECT22UNIONSELECT23UNIONSELECT24UNIONSELECT25UNIONSELECT26UNIONSELECT27UNIONSELECT28UNIONSELECT29)t)datesLEFTJOIN(SELECTDATE(create_time)ASdt,COUNT()ASsucc_cnt,SUM(amt)ASsucc_amtFROM`order`WHEREstatus='S'ANDcreate_time>=CURDATE()-INTERVAL29DAYGROUPBYDATE(create_time))statsONdates.dt=stats.dtORDERBYdates.dt;36.繼續(xù)上表,需將連續(xù)待支付超過30分鐘的訂單狀態(tài)批量改為‘F’,要求行級鎖、可重復(fù)讀隔離、返回被更新行數(shù)。答案:STARTTRANSACTION;SELECTCOUNT()INTO@rowsFROMorderWHEREstatus='P'ANDcreate_time<=NOW()-INTERVAL30MINUTEFORUPDATE;UPDATEorderSETstatus='F'WHEREstatus='P'ANDcreate_time<=NOW()-INTERVAL30MINUTE;SELECT@rowsASaffected_rows;COMMIT;七、計算與證明題(共20分)37.證明:若

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論