假设一个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个。
为获得最佳性能,请说明设计的数据结构、搜索算法,以及资源消耗。如果系统数据量扩大,该如何多机分布处理?
TODO:
确定磁盘文件里存放什么?需要多少个文件?
怎么通过song_id来定位该song所在的文件的url列表?
如何存储URL_ID计数?
http://tech.techweb.com.cn/thread-222923-3-1.html写道
内存不够存储这些url,所以将数据写入若干个文件中。
每一首歌曲对应的存储在文件中的信息格式为(url1, url2……)。
文件的总大小大约为2^24*2^10*4 =2^36 =64GB.根据SongID即可计算出在哪个文件的哪个位置,那么一个随机的查询操作耗时即是一次随机打开文件啊并执行seek操作读取数据的实际,大约是ms级别。
将每首歌曲的信息存入文件中,由于每首歌的url不超过2^10个,所以在文件中每首歌的存储结构是2^10个int数,每个int数字标识着一个url。-1表示url不存在。初始化时将文件中每个int数初始化为-1.
这样每个SongID对应的信息占用的空间为2^10*4=4KB,设每个文件大小1G,那么每个文件可存储2^18=256K个Song的信息。总共需要64个文件,把这些文件编号从0-63.
对于任意一个SongID,他所对应的url信息所在的文件编号是:SongID> > 18,在文件中的位置是:(SongID&0x3FFFF) < <12.
另外内存中用一个2^24大小的short int型数组来保存每一首歌曲对应的url的个数,计数组名为urlCount[],初始化时值为-1,表示对应的Song_ID不存在。此数组占用空间2^25Byte=32MB;
url是否可用的信息用位图来标识。位图保存在内存中,占用的空间为2^30/8=2^27 Byte=128MB.
对所要求的操作:
:1) 通过SONG_ID搜索一首歌的URL_ID,给出URL_ID计数和列表
通过SONG_ID计算出文件号和对应在文件中的位置,从urlCount[]中读取url个数,读出所有的url,并对每个url_ID查询位图看是否可用,若可用,将此url加入返回列表。
:2) 给定一个SONG_ID,为其添加一个新的URL_ID
通过SONG_ID计算出文件号和对应在文件中的位置,设为start,在通过urlCount[]得到url个数,假设有n个url,那么将新的URL_ID写入文件的start+sizeof(int)*n处。修改urlCount[SONG_ID]的值。
:3) 添加一个新的SONG_ID
检查将对应的urlCount[SONG_ID],若为-1,则修改为0,若大于等于0,则表明改Song_ID已经存在。
:4) 给定一个URL_ID,将其置为不可用
修改url位图,标识URL_ID对应的位,表示为不可用。
分享到:
相关推荐
map3d的一个IDL的演示实例代码,是有助于初学者对IDL的学习。内容主要是对于地图的三维可视化代码
SkyPhoto-Map3D立体测图软件是一款专为IT专业人士设计的高级工具,主要用于地理空间信息的采集和处理。这款软件的独特之处在于它能够利用点云数据生成三维立体地图,从而提供更为精确和直观的测绘解决方案。在描述中...
首先,我们来理解标题"android 实现远程和本地播放MAP3"中的"远程"和"本地"的概念。"远程"通常指的是通过网络连接从服务器或其他互联网位置获取MP3文件进行播放,例如从云服务或HTTP/HTTPS服务器下载。而"本地"则指...
Android map3播放器源码系列集合下载 在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止播放音乐,打完电话继续播放。当然还有上一个版本的甩歌功能,用的是加速度传感器,...
代码分析见:... ... 2.目录说明 ...├─map ........geojson地理数据 │ ├─chongqing.json ...........│ ├─city...........├─js ........JS封装库 │ ├─app.js ...........
map3.pgm
Lep-MAP3是用于链接映射的新颖且免费的软件。 它可以在非常多的标记和单个或多个家族的个体上构建连锁图。 特别是,即使测序深度很低,它也支持全基因组测序数据。 如果您使用Lep-MAP3,请引用P. Rastas。 Lep-MAP3...
"MAP3BSPC-开源" 是一个与游戏开发相关的项目,特别是针对Quake 3引擎的关卡(BSP)编译工具。"MAP3BSPC"是该项目的核心部分,而"开源"则表明该项目遵循开放源代码的原则,允许用户查看、修改和分发其源代码。 **...
json
基本的GOOGLE MAP API 入门。包括地址解析、反向地址解析、鼠标事件监听、infowindow等基本应用。
pyecharts官方在2月28日发布了1.7的全新版本,最重要的一个是完善了Map3D: 具体请看:http://pyecharts.org/#/zh-cn/3d_charts?id=map3d-三维地图 觉得这个挺好玩的,正好今天在我之前的文章pyecharts实现新冠肺炎...
标题和描述中提到的"AMap_Search_V5.0.0_20170309.jar"和"Android_Map3D_SDK_V5.0.0_20170311.jar"是高德地图API的两个重要组成部分,它们是用于在Android平台上集成高德地图服务的关键组件。这两个文件的版本号表明...
快速预览
https://jingyan.baidu.com/article/cbcede07ed1dcd02f40b4d1f.html 千千静听mp3转aac文件教程.
10. **数据导入与导出**:3D图工具箱与其他MATLAB模块集成,可以方便地导入和导出各种数据格式,如ASCII、Excel、图像文件等。 总的来说,MATLAB的"3D图工具箱"是科学计算和工程分析的强大辅助工具,它使用户能够...
ECharts GL 新增了三维的笛卡尔坐标系、地理坐标系,并且在这些新的三维坐标系基础上提供了六个新的系列类型,包括 散点图 scatter3D、折线图 line3D、柱状图 bar3D、曲面图 surface、飞线图 lines3D以及地图 map3D...