论坛首页 Java企业应用论坛

3000w数据的表,取某项字段前50项数据 ,内存2g

浏览 21781 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (11) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-10-01  
minimu 写道
原体的描述是什么样子的呢?

就是上面样子的····
0 请登录后投票
   发表时间:2009-10-02  
我想的:
a. 3000w数据,分成3000组,每组1000条。分组不用占内存,前提是数据是顺序数据。
b. 每组数据找出最大值,并记录该组ID。找最大值的算法只需要1K内存,存各族最大值及组ID是3K内存。
c. 对各组的最大值进行排序,找出前50组ID。3K数据排序,内存需求也不高。
d. 排序前50组数据,总共就剩下5万条了,直接排序即可。
e. 5万条数据也可以再按之前方法细分一次。
0 请登录后投票
   发表时间:2009-10-02   最后修改:2009-10-02
应该是map/reduce模型 每个map记录最大的50个数(省了所有排序比较),最后一个reduce找前面所有最大的50个数。不知道可不可以。
0 请登录后投票
   发表时间:2009-10-02  
恕我愚昧,不是很清楚题目意思
“取某项字段前50项数据”

比如这字段全部都是数字(1~3000w升序)
那题目做出来的结果,是不是1~50?
如果是这样,那分段来做结果怎么会对呢?
0 请登录后投票
   发表时间:2009-10-02  
题目确实写的不太清楚
对于我们这些小菜,不理解其中的一些默认条件
高手常常会把问题往难了想
我们就常常会把问题往简单了想
0 请登录后投票
   发表时间:2009-10-02  
lnaigg 写道
我想的:
a. 3000w数据,分成3000组,每组1000条。分组不用占内存,前提是数据是顺序数据。
b. 每组数据找出最大值,并记录该组ID。找最大值的算法只需要1K内存,存各族最大值及组ID是3K内存。
c. 对各组的最大值进行排序,找出前50组ID。3K数据排序,内存需求也不高。
d. 排序前50组数据,总共就剩下5万条了,直接排序即可。
e. 5万条数据也可以再按之前方法细分一次。



朋友这个是有问题的,1000条里面你每个只找一条 如果莫一个1000条的第二大的数是整个3000w数据第2大的数,那么你不是取不到了么?
0 请登录后投票
   发表时间:2009-10-02  
sky726 写道
恕我愚昧,不是很清楚题目意思
“取某项字段前50项数据”

比如这字段全部都是数字(1~3000w升序)
那题目做出来的结果,是不是1~50?
如果是这样,那分段来做结果怎么会对呢?

朋友你看哈 分成1000段 我取出来的是每段的前50条数据 这个样子就是为了避免 前面那位朋友出现的情况
···3000w的数据在数据库里面直接排序是不可能的~
0 请登录后投票
   发表时间:2009-10-02  
J-catTeam 写道
sky726 写道
恕我愚昧,不是很清楚题目意思
“取某项字段前50项数据”

比如这字段全部都是数字(1~3000w升序)
那题目做出来的结果,是不是1~50?
如果是这样,那分段来做结果怎么会对呢?

朋友你看哈 分成1000段 我取出来的是每段的前50条数据 这个样子就是为了避免 前面那位朋友出现的情况
···3000w的数据在数据库里面直接排序是不可能的~

原来如此,我想说的就是前面那位朋友的情况
0 请登录后投票
   发表时间:2009-10-02   最后修改:2009-10-02
最小堆 大家知道吗? 分冶法呀!

按照pk顺序去取50(这样数据库不会排序,排序就是一个死)然后合并 砍掉50 继续去下面的50 复杂度 我就不说了。

这是简单的而且普遍的处理办法。


补充一点:
这里的3000W件 其实一个幌子,而且还是一个分支点。

如果 3000W条记录*行记录字节数>2G的临界 不能一次取得内存队列里 (注意伪列和排序问题)

分析问题要一步一步来,然后就是多线程问题 加什么该死的二分法呀什么的。

这道题目不值10K月薪。

0 请登录后投票
   发表时间:2009-10-02  
GooHome 写道
最小堆 大家知道吗? 分冶法呀!

按照pk顺序去取50(这样数据库不会排序,排序就是一个死)然后合并 砍掉50 继续去下面的50 复杂度 我就不说了。

这是简单的而且普遍的处理办法。


补充一点:
这里的3000W件 其实一个幌子,而且还是一个分支点。

如果 3000W条记录*行记录字节数>2G的临界 不能一次取得内存队列里 (注意伪列和排序问题)

分析问题要一步一步来,然后就是多线程问题 加什么该死的二分法呀什么的。

这道题目不值10K月薪。



朋友能解释的再详细一点么?
在上面有一个朋友提到了 他说这道题是考验算法的 如果真是考验数据量的话,数据库分层,切分表什么的就能做的 ,是DBA考虑的东西,
所以这道题 ··我已经有点晕了

你最后说的不值10k还是不止10k啊?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics