无论工作还是生活中,我们时常不得不面对大量繁杂事务的处理,仔细思考下,其实这种场景与IT领域中的大数据处理非常相似,其目标都是一样的,输入大量的任务信息,经过一系列的思考、规划和执行,输出为指定的任务结果。那么,在大数据处理场景中,我们对于提升执行效率和压缩执行时间的很多思路,也就可以同样带入到真实的生活和工作场景中了。
输入端
在大数据领域,我们通常采用的方案有:
对数据进行预过滤,仅保留后续任务执行所需要的字段和行信息
将数据类型进行预定义,省去schema的推导过程
对数据进行序列化,如将JSON转成Protobuf,压缩数据体积
映射到现实世界里:
#1 - 尤其是在当前这个信息爆炸的时代,信息的获取成本往往很低,但同时也稀释了注意力,因此我们需要刻意练习快速过滤无效信息,提取关键信息的洞察能力
#2 - 当面对可能重复出现的问题时,我们应当有意识地分析在解决该问题时,需要哪些信息,这些信息的类型是什么,可能的内容是什么,这样一来,我们会在问题出现时,脑海中快速浮现出一个信息收集模板
#3 - 在解决很多问题时,我们需要大量密集的信息输入,但这并不意味着我们必须记住每个细节,相反过于关注细节,往往会忽略对全局的把握,因此,我们可以对信息进行有意识地压缩,通过归纳的方式建立目录索引,需要的时候按图索骥即可
执行期
在大数据领域,我们通常采用的方案有:
拆分任务,将单个大任务拆分为多个独立可执行的小任务
增加并行度,充分利用CPU的线程调度,多任务可以并行处理
缓存计算,对于频繁用到的结果,避免总是从头开始计算
使用streaming方式处理任务流,避免任务堆积
背压机制,任务处理不过来时,暂停接收新数据,以保护系统稳定性
映射到现实世界里:
#1 - 复杂的任务要比难的任务更容易解决,我们可以将一个复杂的系统任务分而治之,拆解成多个容易解决的小问题,在资源允许的情况下,我们甚至可以同时执行其中相对独立的问题,最后进行结果汇总
#2 - 当我们面对多个任务时,并非每个任务从头到尾都需要我们盯着,因此在某些情况下,一个任务启动后,我们即可切换到其他任务的启动和执行,这样我们就可以同时执行多个任务,当然,这里有一个隐性的成本就是注意力的切换
#3 - 我们可以将很多重复性的决策形成固定的SOP或习惯,来节省宝贵的精力,避免重复且低价值的思考
#4 - 对于很多紧急但短小的事务,我们不必总是攒到足够多才去处理,否则很容易会有心理上的焦虑,且很难预料到时候是否会有别的临时任务,因此对于这类事务,我们可以“来一条处理一条”避免任务堆积
#5 - 这更多的是一种保护机制,避免任务过多造成心理过载而崩溃,当已经开始感觉到力不从心的时候,不必硬撑,主动说不,及时暂停外部任务的承接,不做超负荷的运转
输出端
在大数据领域,我们通常采用的方案有:
只输出关键信息,全量数据往往数据量很大,但未必全部有价值
异步处理,保证最终一致性,对于长任务,后台慢慢执行,告知前台状态即可
关键数据进行持久化,其他任务可直接基于其进行深度计算,避免重复计算
映射到现实世界里:
#1 - 我们处理的任务和过程或许非常复杂,但对于领导或客户,他们并不关心这些,即便是对处理的结果,他们也不想听你的长篇大论,我们需要对结果进行归纳总结和关键信息的提取,精准地投递结论
#2 - 面对复杂任务,不必马上给出结果答复,只需要告知收到,然后慢慢分析解决方案,在执行过程中及时反馈处理状态即可
#3 - 很多任务并不是一次性价值的工作,往往可以沉淀成个人或团队可复用的资产,将其落盘存档,久而久之,效率的提升会呈指数级增长
简而言之,大脑的思考本身就是高耗能的过程,我们可以利用工程师思维来提升效率,减少能耗。