博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
100亿个数字找出最大的10个
阅读量:6836 次
发布时间:2019-06-26

本文共 598 字,大约阅读时间需要 1 分钟。

1、首先一点,对于海量数据处理,思路基本上是确定的,必须分块处理,然后再合并起来。

2、对于每一块必须找出10个最大的数,因为第一块中10个最大数中的最小的,可能比第二块中10最大数中的最大的还要大。

3、分块处理,再合并。也就是Google MapReduce 的基本思想。Google有很多的服务器,每个服务器又有很多的CPU,因此,100亿个数分成100块,每个服务器处理一块,1亿个数分成100块,每个CPU处理一块。然后再从下往上合并。注意:分块的时候,要保证块与块之间独立,没有依赖关系,否则不能完全并行处理,线程之间要互斥。另外一点,分块处理过程中,不要有副作用,也就是不要修改原数据,否则下次计算结果就不一样了。

4、上面讲了,对于海量数据,使用多个服务器,多个CPU可以并行,显著提高效率。对于单个服务器,单个CPU有没有意义呢?

  也有很大的意义。如果不分块,相当于对100亿个数字遍历,作比较。这中间存在大量的没有必要的比较。可以举个例子说明,全校高一有100个班,我想找出全校前10名的同学,很傻的办法就是,把高一100个班的同学成绩都取出来,作比较,这个比较数据量太大了。应该很容易想到,班里的第11名,不可能是全校的前10名。也就是说,不是班里的前10名,就不可能是全校的前10名。因此,只需要把每个班里的前10取出来,作比较就行了,这样比较的数据量就大大地减少了。

转载地址:http://eaqkl.baihongyu.com/

你可能感兴趣的文章
wget使用小技巧
查看>>
Apache Camel框架入门示例
查看>>
xcode6.3配置svn,详情教程,小白戳进来。
查看>>
【精心挑选】10款基于 jQuery 的图片360度旋转插件
查看>>
Linux下升级python2.4->python2.7
查看>>
Exception
查看>>
如何获取iOS设备的IP地址
查看>>
ads设置
查看>>
mysql忘记密码怎么改
查看>>
Coding and Paper Letter(二十四)
查看>>
征集并发文献译者之Disruptor
查看>>
多态实现机制:静态分派和动态分派
查看>>
python-34:极视界爬虫总结
查看>>
ConcurrentHashMap原理分析
查看>>
括号匹配算法
查看>>
ubuntu 14.04如何设置静态IP
查看>>
corosync+pacemaker实现高可用(HA)集群(二)
查看>>
第2章 S交换机管理平面安全
查看>>
Android 唯一标识获取
查看>>
如何查看mysql连接相关参数
查看>>