1.分治思想
需求:我有一万个元素,期望时间复杂度是O(4)
解法1:1万个元素线性查找,时间复杂度为O(n)
解法2:1万个元素二分法查找,nlog(n)
解法3:1万个元素 hashcode()%2500 相当于2500个桶,每个桶装4个元素,实现是时间复杂度O(4)
2.分治思想的应用场景
2.1 Redis集群
2.2 ElasticSearch集群
2.3 postgresql集群
2.4 Hadoop生态
3.单机处理大数据问题
需求:有一个非常大的文本文件,里面有很多很多行,只有两行一样,他们出现在未知的位置,需要查找他们;而且单机可用的内存很少,也就100M以内
假设io速度是500M/s
1T文件读取一遍需要30min
思考:如何让时间变为分钟、秒级?
解法: 30min=1800s
1T readline()%1800 分桶
读取时间为 1s(io时间),内存寻址时间比io寻址时间快10w倍,总时间为1.xxs
4.集群分布式处理大数据的辩证
上面1800分桶(机器)真的比一台快么?
如果考虑分发上传文件的时间呢?
如果考虑每天都有1T数据的产生呢?
如果增量了一年,最后一天计算数据呢?
时代、场景、数据体量决定了使用单机或者集群的场景。
5.小结
5.1 分而治之思想
5.2 并行计算思想
5.3 计算向数据移动思想(数据远大于计算逻辑的传输时间)
5.4 数据本地化读取思想
以上这些是学习大数据技术时需要关心的重点。
网友评论