锁定老帖子 主题:迅雷的一个面试题
精华帖 (8) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-29
有1kw用户..并不代表有1kw分...
用说不了??? |
|
返回顶楼 | |
发表时间:2012-02-29
jiuyuehe 写道 Kisses99 写道 我觉得ls回答的有问题,lz问题也有歧义。到底这个id, score里的id是不是用户id?还是只是一个pk?
如果说题目实质上是求在这个表结构下,已知score,求score的排名,那么 select count(1) from table where score<=score# 不就完了么?score是有index的,这样的操作用的了几秒钟? 楼上说什么分区,对于这种显然是要跨分区查询的sql,并没有什么特别的好处。 求喷。 是用户id ,我试了下,600w要28s。蛮满的 score加索引 |
|
返回顶楼 | |
发表时间:2012-02-29
inotseeyou 写道 这样怎么样?
存储部分排名信息,第1,1*n,2*n,3*n,...的排名信息(分数) 1亿用户平均抽取n = 1亿/(k=10000) = 10000 即内存中存储了平均分布在排名中的10000个用户的排名信息(定时同步内存与数据的对应排名用户信息) 通过二分差找确认用户所属分区, 读取分区内容,再通过二分查找获得具体排名 (定时同步内存与数据的对应排名用户信息) 上亿数据排名同步的方案是什么? |
|
返回顶楼 | |
发表时间:2012-02-29
上述直接用sql实现的方案就别想了。
这个功能不可能是实时的。 只能是相对实时,基本上就是2楼的方案。 关键是同步方案 |
|
返回顶楼 | |
发表时间:2012-02-29
hardPass 写道 tsxm 写道 hardPass 写道 就一定要用数据表来完成么?
CPU,内存,外存 同学们啊! 桶排序呗, 直接在程序中搞个数组,数组的下标就是分数,元素是每个分数对应的人数。 具体的,如果不需要精确计算,为了减少同步及遍历计算的性能损失,可以为每个数组元素设定一个预留值。 都说内存不够了,用外存估计速度太慢 1G内存还不够?如果现在排名第一的是1亿分,也就是一个长度为1亿的数组而已 300MB左右就够了,剩下的内存还可以再维护个计数缓存的数组(每个元素是上面数组希格玛,0到i),数组长度是上面数组一样 这个方案不错。 数据库存储时,需要分库。 更新数据库时,同时更新内存数组。 同样内存中的数组,也可以分到不同的机器上,比如1-10000分数的在机器1上,10001-20000的在机器2上,同分库分表原理。 这样性能极佳,方案简单,可用性也有保障。 |
|
返回顶楼 | |
发表时间:2012-02-29
是根据用户ID查找用户名次,关键是找出用户所在行
|
|
返回顶楼 | |
发表时间:2012-02-29
最后修改:2012-02-29
2亿数据库表字段:ID,分数,用户ID
select count(ID) from tableName where 分数>当前用户分数 至于什么分区索引 那时数据库设计者考虑的东西 你只需要快速简练的查询该排名即可,这样会很慢么?????????? |
|
返回顶楼 | |
发表时间:2012-02-29
boreas_baosj 写道 2亿数据库表字段:ID,分数,用户ID
select count(ID) from tableName where 分数>当前用户分数 至于什么分区索引 那时数据库设计者考虑的东西 你只需要快速简练的查询该排名即可,这样会很慢么?????????? count 计数其实是很慢的,数据库的IO压力很大。 |
|
返回顶楼 | |
发表时间:2012-02-29
raychl 写道 boreas_baosj 写道 2亿数据库表字段:ID,分数,用户ID
select count(ID) from tableName where 分数>当前用户分数 至于什么分区索引 那时数据库设计者考虑的东西 你只需要快速简练的查询该排名即可,这样会很慢么?????????? count 计数其实是很慢的,数据库的IO压力很大。 走索引和不走索引差别就大了 |
|
返回顶楼 | |
发表时间:2012-02-29
freish 写道 raychl 写道 boreas_baosj 写道 2亿数据库表字段:ID,分数,用户ID
select count(ID) from tableName where 分数>当前用户分数 至于什么分区索引 那时数据库设计者考虑的东西 你只需要快速简练的查询该排名即可,这样会很慢么?????????? count 计数其实是很慢的,数据库的IO压力很大。 走索引和不走索引差别就大了 用户的访问量太大了,该索引将会成为热区,也够呛的。 |
|
返回顶楼 | |