- 浏览: 17313 次
最新评论
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取出来,作比较就行了,这样比较的数据量就大大地减少了。
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取出来,作比较就行了,这样比较的数据量就大大地减少了。
发表评论
-
aaa
2018-03-26 17:23 01、前后端安全方案(防篡改、防重放、敏感信息加解密、防XSS攻 ... -
ssssss
2018-03-26 16:16 02015年年度计划 1、熟悉环境、架构、开发流程 2、业务模 ... -
golsing
2018-03-26 16:14 02015年年度计划 1、熟悉环境、架构、开发流程 2、业务模 ... -
ClientServiceRestTemplateImpl
2018-03-10 17:23 561package com.pingan.ff.btoam.dem ... -
ClientService
2018-03-10 17:34 421package com.pingan.ff.btoam.dem ... -
ClientConfig
2018-03-10 17:33 387package com.pingan.ff.btoam.dem ... -
responseDTO
2018-03-10 17:32 523package com.pingan.ff.btoam.dem ... -
配置项
2018-03-10 17:31 456client.connectTimeout=60000 cli ... -
HttpsClientRequestFactory
2018-03-08 20:48 1410package com.pingan.ff.btoam.dem ... -
HttpsTest
2018-03-08 20:23 817package com.pingan.ff.btoam.dem ... -
dfdfdf
2018-03-08 20:22 450<!--连接池管理 --> <bean ... -
sdds
2018-03-08 20:19 54package com.pingan.ff.esb.proxy ... -
ddsd
2018-03-08 20:29 611import java.security.cert.Certi ... -
测试一下
2017-08-23 13:50 545测试测试测试测试测试测试测试 -
面经面经
2017-03-29 19:13 515一、简历 简历里面需要 ... -
浅谈https\ssl\数字证书
2015-03-03 11:15 464http://www.cnblogs.com/P_Chou/a ... -
Java多线程总结之线程安全队列Queue
2015-01-07 15:20 820在Java多线程应用中,队列的使用率很高,多数生产消费模型的 ... -
面试问题
2015-01-07 14:45 547今天被架构师问了一连串的问题,估计问了有一个多小时 ... -
http长连接与短连接
2015-01-05 17:34 5271. HTTP协议与TCP/IP协议的关系 HTTP的长 ... -
ZooKeeper原理
2014-12-30 09:33 606ZooKeeper是一个分布式的,开放源码的分布式应用 ...
相关推荐
从一亿个数中找出最大的100个 或者n个 用了个堆从一亿个数中找出最大的100个 或者n个 用了个堆
从一亿个数中找出最大的100个 或者n个 用了个堆
一亿取100数字Top100,速度非常快得算法。值得参考
连续输入5个100以内的数字,统计和、最小和最大
java一亿数字取前100个(3秒钟获取) 速度非常快。 发出来给大家分享
试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 编程任务:对于给定的由n 行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。 Input 输入数据...
c语言中找出一个整型数组中的元素的最大值。源码
C++实现找出两个字符串中最大的公共子串
java一亿数字取前100个(3秒钟获取)Java算法。 java一亿数字取前100个(3秒钟获取) 速度非常快。 发出来给大家分享 java 一亿 前100个
给定两个整型数组,本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。 输出格式: 在一行中按照数字给出的...
微机原理与接口技术实验 以buff开始的内存单元中有10个有符号数(字节型): -37、28、-115、-2、98、-100、93、120、56、-99 请编写程序找出最大的数存入MAX单元中,同时也找出最小的数存入MIN单元中。
美的:100亿,数字化转型路径与实践.pdf
找出一个二维数组的鞍点,即该位置上的元素在该行上最大、在列上最小(也可能没有鞍点)。
java一亿数字取前100个(3秒钟完毕) 效率非常不错哦
编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为: template <class Type> void maxMin (Type *A,...
文件的第1 行是数字三角形的行数n,1£n£100。接下 来n行是数字三角形各行中的数字。所有数字在0..99之间。 Output 程序运行结束时,将计算结果输出到文件output.txt 中。文件的第1 行中的数是计算 出的最大值。...
100亿以内的全部素数 一共 455052511 个
我的100个数字记忆法!(页 1) -学子的最大社区! - Powered by Discuz! Archiver.mht
主要为大家详细介绍了java使用多线程找出最大随机数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下