设计MP3搜索引擎
假設一個 mp3 搜索引擎收錄了 2^24 首歌曲,并記錄了可收聽這些歌曲的 2^30 條 URL,但每首歌的 URL 不超過 2^10 個。系統會定期檢查這些 URL,如果一個 URL 不可用則不出現在搜索結果中。現在歌曲名和 URL 分別通過整型的 SONG_ID 和 URL_ID 唯一確定。對該系統有如下需求:
1) 通過 SONG_ID 搜索一首歌的 URL_ID,給出 URL_ID 計數和列表
2) 給定一個 SONG_ID,為其添加一個新的URL_ID
3) 添加一個新的 SONG_ID
4) 給定一個 URL_ID,將其置為不可用
限制條件:內存占用不超過 1G,單個文件大小不超過 2G,一個目錄下的文件數不超過 128 個。
分析:
SONG_ID和URL_ID都從0開始。
一首歌曲的最大URL列表的大小:2^10 * 4 = 2^12 Byte = 4 KB
一個文件最多容納歌曲數目:2G / 4KB = 2*2^30 / 2^12 = 2^19
最少文件數目:2^24 / 2^19 = 2^5 = 32
解答:1、文件系統
文件以二進制格式存儲數據,以FILE_ID唯一確定,從0開始。
一個文件容納歌曲數目為SONG_COUNT = 2^18,需要的文件數目為FILE_COUNT = 64。
文件存儲的信息分為兩部分:在文件頭部存儲歌曲信息:歌曲ID,能收聽該歌曲的URL數目,URL列表在文件中的偏移量,即:SONG_ID,URL_COUNT,URL_OFFSET。一首歌曲占用SONG_INFO
總結