`
Tonyguxu
  • 浏览: 272283 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

map3搜索与存储的一道面试题

 
阅读更多

假设一个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的演示代码

    map3d的一个IDL的演示实例代码,是有助于初学者对IDL的学习。内容主要是对于地图的三维可视化代码

    android 实现远程和本地播放MAP3

    android 实现远程和本地播放MAP3 有教程,下载可以直接使用,代码有解释

    Android map3播放器源码系列集合下载

    Android map3播放器源码系列集合下载 在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止播放音乐,打完电话继续播放。当然还有上一个版本的甩歌功能,用的是加速度传感器,...

    echarts开发的自动旋转map3D下钻和柱图地图

    代码分析见:... ... 2.目录说明 ...├─map ........geojson地理数据 │ ├─chongqing.json ...........│ ├─city...........├─js ........JS封装库 │ ├─app.js ...........

    map3.pgm

    map3.pgm

    SkyPhoto-Map3D立体测图软件

    目前只有本软件试用版,压缩包里面含着详细的操作手册。

    Lep-MAP3-开源

    Lep-MAP3 是一种新颖的免费链接映射软件。 它可以在单个或多个家族的大量标记和个体上构建连锁图。 尤其是支持低测序深度的全基因组测序数据。 如果您使用 Lep-MAP3,请引用 P. Rastas。 Lep-MAP3:即使对于低覆盖率...

    MAP3BSPC-开源

    MAP3BSPC的目的是提供完全从头开始编写的,由ID软件提供的Quake 3 BSP编译器的替代产品,不受原始许可限制的限制。

    GOOGLE MAP3 基本调用demo

    基本的GOOGLE MAP API 入门。包括地址解析、反向地址解析、鼠标事件监听、infowindow等基本应用。

    pyecharts新功能体验 | pyecharts-Map3D实现新冠肺炎疫情全国数据立体可视化

    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以及so文件下载

    AMap_Search_V5.0.0_20170309.jar Android_Map3D_SDK_V5.0.0_20170311.jar以及包含so文件的libs下载

    LEP数据对轻型疏血介质的约束

    在LHC搜索从100 GeV到几个TeV的介体质量的情况下,对这种情况进行了很好的研究。 LEP夸克或反夸克中介体的排放会导致双喷射,缺少能量和四喷射信号,我们用它来限制相关的耦合。 我们关注2mχ&gt; m R的场景,这些场景...

    3D图工具箱 matlab

    各种画图的集合,具有很好的整理,集中处理的能力,可直接调用

    echarts-gl.7z

    ECharts GL 新增了三维的笛卡尔坐标系、地理坐标系,并且在这些新的三维坐标系基础上提供了六个新的系列类型,包括 散点图 scatter3D、折线图 line3D、柱状图 bar3D、曲面图 surface、飞线图 lines3D以及地图 map3D...

    LEP中c和b夸克的碎裂分数成迷人的强子

    从LEP测量中得出c和b夸克的碎片分数,这些碎片分别进入弱衰减的有晕子强子D0,D +,Ds +和Λc+,以及有魅力子介子D ∗ +。 c夸克碎裂分数表示作为给定的迷惑强子的强子化的概率,而b夸克碎裂分数定义为产生特定的...

    Mbc3Map

    NULL 博文链接:https://juanshuchun.iteye.com/blog/1049905

    3D-glmaps.zip

    3D-glmaps.zip,从头开始的数据可视化示例和教程。阿肯色州阿肯色州,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及其他应用程序。

Global site tag (gtag.js) - Google Analytics